Zjnu Stadium HDU - 304 加权并查集

题意:

观众席围成一圈。列的总数是300,编号为1–300,顺时针计数,我们假设行的数量是无限的。将有N个人去那里。他对这些座位提出了要求:这意味着编号A的顺时针X距离坐着编号B。例如:A在第4列,X是2,那么B必须在第6列(6=4+2)。现在你的任务是判断请求是否正确。

题目:

In 12th Zhejiang College Students Games 2007, there was a new stadium built in Zhejiang Normal University. It was a modern stadium which could hold thousands of people. The audience Seats made a circle. The total number of columns were 300 numbered 1–300, counted clockwise, we assume the number of rows were infinite.
These days, Busoniya want to hold a large-scale theatrical performance in this stadium. There will be N people go there numbered 1–N. Busoniya has Reserved several seats. To make it funny, he makes M requests for these seats: A B X, which means people numbered B must seat clockwise X distance from people numbered A. For example: A is in column 4th and X is 2, then B must in column 6th (6=4+2).
Now your task is to judge weather the request is correct or not. The rule of your judgement is easy: when a new request has conflicts against the foregoing ones then we define it as incorrect, otherwise it is correct. Please find out all the incorrect requests and count them as R.

Input

There are many test cases:
For every case:
The first line has two integer N(1<=N<=50,000), M(0<=M<=100,000),separated by a space.
Then M lines follow, each line has 3 integer A(1<=A<=N), B(1<=B<=N), X(0<=X<300) (A!=B), separated by a space.

Output

For every case:
Output R, represents the number of incorrect request.

Sample Input

10 10
1 2 150
3 4 200
1 5 270
2 6 200
6 5 80
4 7 150
8 9 100
4 8 50
1 7 100
9 2 100

Sample Output

2

Hint

Hint:
(PS: the 5th and 10th requests are incorrect)

思路

1.由于题中明确给出,编号A的顺时针X距离坐着编号B,故x<300,当我们用并查集找到一个祖宗节点时,我们可以将该点看作原点,将圈拉成直线看待。即可忽略成环。

2.b->a, a离”原点更近“

int f(int x)
{if(x!=dp[x]){int t=dp[x];/*因为在递归找祖先的过程中,dp[x]的值会改变,而我们我们只需要找到距离x最近的点,即可得到dp[x]到祖宗节点的距离。所以要记录t的值*/dp[x]=f(dp[x]);num[x]+=num[t];}return dp[x];
}
  1. dp[b]->dp[a]
  dp[v]=u;num[v]=num[a]+x-num[b];

在这里插入图片描述

AC代码

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int M=5e4+10;
int dp[M],num[M];
int f(int x)
{if(x!=dp[x]){int t=dp[x];dp[x]=f(dp[x]);/*因为在递归找祖先的过程中,dp[x]的值会改变,而我们我们只需要找到距离x最近的点,即可得到dp[x]到祖宗节点的距离。所以要记录t的值*/num[x]+=num[t];}return dp[x];
}
bool dfs(int a,int b,int x)
{int u=f(a),v=f(b);/*a->u,b->v*/if(u==v){if(num[a]+x!=num[b])/*b->a,又起点为父节点*/return true;return false;}dp[v]=u;num[v]=num[a]+x-num[b];return false;
}
int main()
{int m,n;while(~scanf("%d%d",&m,&n)){int ans=0;for(int i=0;i<m;i++){dp[i]=i;num[i]=0;}while(n--){int a,b,x;/*设起点为祖宗节点,则都指向起点b->a*/scanf("%d%d%d",&a,&b,&x);if(dfs(a,b,x))ans++;}printf("%d\n",ans);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

还不明白可空类型原理? 我可要挖到底了

一&#xff1a;背景1. 讲故事做好自媒体到现在有一个月了&#xff0c;关注我的兄弟应该知道我产出了不少文章&#xff0c;号里的粉丝也多起来了&#xff0c;我也尽最大努力做到有问必回&#xff0c;现在是基础的、高深的问题都接踵而来&#xff0c;可我也只是一只小菜鸟&#x…

[设计模式]策略模式

策略模式:定义了一系列算法&#xff0c;并将每一个算法封装起来&#xff0c;而且使它们还可以相互替换。 策略模式让算法独立于使用它的客户而独立变化。 代码如下: #include <iostream> using namespace std;class WeaponStrategy { public:virtual void useWeapon()…

蜘蛛牌 HDU - 1584(搜索——达到先让某些段先结合,达最优解)

题意&#xff1a; 一排杂乱的牌&#xff0c;牌间距为1&#xff0c;每次移动只能将小的牌&#xff0c;移动到较大牌上&#xff0c;最终使得牌从小到大排好在一堆。问移动的最小距离。 题目&#xff1a; 蜘蛛牌是windows xp操作系统自带的一款纸牌游戏&#xff0c;游戏规则是这…

oracle 启动实例配置,centOS 7配置单实例oracle自启动

1、修改/etc/oratab(oracle用户操作)vi /etc/oratabtestdb:/u01/app/oracle/product/11.2.0/db_1:N改为testdb:/u01/app/oracle/product/11.2.0/db_1:Y###注意替换对应 ORACLE_SID 和 ORACLE_HOME2、修改$ORACLE_HOME/bin/dbstart(oracle用户操作)echo $ORACLE_HOMEvi $ORACLE_…

浅析微软的网关项目 -- ReverseProxy

浅析微软的网关项目--ReverseProxyIntro最近微软新开了一个项目 ReverseProxy &#xff0c;也叫做 YARP(A Reverse Proxy)官方介绍如下&#xff1a;YARP is a reverse proxy toolkit for building fast proxy servers in .NET using the infrastructure from ASP.NET and .NET.…

[设计模式]模板方法模式

模板方法模式: 定义一个操作中算法的框架&#xff0c;而将一些步骤延迟到子类中。模仿方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 代码如下: #include <iostream> using namespace std;class DrinkTemplate { public:virtual void Boi…

Max Sum Plus Plus HDU - 1024(动态规划求最大M子段和)

题意&#xff1a; ----最大M子段和问题 给定由 n个整数&#xff08;可能为负整数&#xff09;组成的序列以及一个正整数 m&#xff0c;要求确定序列的 m个不相交子段&#xff0c;使这m个子段的总和达到最大&#xff0c;求出最大和。 题目&#xff1a; Now I think you have …

oracle游标的常用属性,Oracle基础知识(二十六) - Oracle游标常用属性

Oracle游标相信大家都不陌生&#xff0c;下面就为您详细介绍Oracle游标的常用属性&#xff0c;如果您对Oracle游标方面感兴趣的话&#xff0c;不妨一看。Oracle游标常用属性&#xff1a;%FOUND&#xff1a;变量最后从游标中获取记录的时候&#xff0c;在结果集中找到了记录。%N…

差距(分享)

非985大学生, 你和别人的差距在哪里?&#xff08;转&#xff09; 非985大学生, 你和别人的差距在哪里? 中国青年报03-24 在知乎上看到这样一段话&#xff1a; “渣学校意味着渣教学&#xff0c;渣教学意味着渣学历&#xff0c;渣学历意味着渣就业&#xff0c;就算以后考了研究…

在微服务框架Demo.MicroServer中添加SkyWalking+SkyApm-dotnet分布式链路追踪系统

1.APM工具的选取Apm监测工具很多&#xff0c;这里选用网上比较火的一款Skywalking。Skywalking是一个应用性能监控(APM)系统&#xff0c;Skywalking分为服务端Oap、管理界面UI、以及嵌入到程序中的探针Agent部分&#xff0c;大概工作流程就是在程序中添加探针采集各种数据发送给…

[C++11]constexpr修饰常量表达式

常量表达式和非常量表达式的计算时机不同&#xff0c;非常量表达式只能在程序运行阶段算出结果&#xff0c;但是常量表达式的计算往往发生在程序的编译阶段&#xff0c;这可以极大提高程序的执行效率。 constexpr定义一个常量。 代码如下: #include <iostream> using …

oracle sql execute elapsed time,SQL ordered by Elapsed Time 脚本

--提取&beg_snap 、&end_snapselect * from dba_hist_snapshot x ;--提取&dbidselect * from v$database;--提取$inst_numselect * from v$instance;运行的时候输入上面的值(如果需要输入多次&#xff0c;那么输入同样值即可)select from (select round(nvl((sqt.e…

计算机组成原理期末复习题

地址总线A15~Ao(低),存储空间(按字节编址)分配如下 2000H~3FFFH为ROM区, 5000H~6FFFH为RAM区。用 ROM芯片(4Kx4)和RAM芯片(4Kx4)组成该存储器。请回答 &#xff1a;(1)分别需要ROM和RAM多少片? (2)用二进制形式写出每组芯片的地址范围,并说明可以通过哪些地址位来形成片选信号…

干货分享:如何使用Kubernetes的Ingress API

导语以Kubernetes的Kong为例&#xff0c;聊聊当前流行的开源且与云无关的Ingress控制器。正文您可以通过使用诸如Kong for Kubernetes的Ingress控制器&#xff08;使用自定义资源定义并提供许多插件&#xff09;来极大地扩展Ingress资源的功能。Kubernetes正在整个技术行业中得…

[PAT乙级]1029 旧键盘

旧键盘上坏了几个键&#xff0c;于是在敲一段文字的时候&#xff0c;对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字&#xff0c;请你列出肯定坏掉的那些键。 输入格式&#xff1a; 输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。每…

表空间oracle查询,Oracle表和表空间查询

用户查询查询和用户相关的数据创建用户CREATE USER userIDENTIFIED BY password[DEFAULT TABLESPACE tablespace][TEMPORARY TABLESPACE tablespace]查询所有用户数select username from dba_users;查询当前实例名称select instance_name from v$instance;表空间查询查询用户表…

计算机组成原理期末复习往年卷子

1. I/O设备的编址方式通常有___统一编址__和_独立编址__两种方式。P145 2&#xff0e;Cache是一种高速缓冲存储器&#xff0c;是为了解决____CPU____和___主存____之间速度不匹配而采用的一项重要技术。P124 3&#xff0e;在计算机系统中&#xff0c;I/O设备与主机传递消息的…

.NET Core接入ElasticSearch 7.5

写在前面最近一段时间&#xff0c;团队在升级ElasticSearch&#xff08;以下简称ES&#xff09;&#xff0c;从ES 2.2升级到ES 7.5。也是这段时间&#xff0c;我从零开始&#xff0c;逐步的了解了ES&#xff0c;中间也踩了不少坑&#xff0c;所以特地梳理和总结一下相关的技术点…

[C++11]字符串原始字面量

代码如下: #include <iostream> #include <string> using namespace std;int main() {string str1 R"(D:\hello\world\test.txt)";cout << str1 << endl;string str2 R"(dsdasasdasasda asdagdfhadagd)";cout << str2 &l…

oracle实现序列,oracle中创建序列和自增长列的实现方式

众所周知&#xff0c;在SQL Server中设置自增长列很简单&#xff0c;但是在ORACLE中则不然&#xff0c;现在介绍一下ORACLE中自增长列如何实现&#xff1a;1.创建序列。举例如下&#xff1a;create sequence seq_personincrement by 1start with 1nomaxvalue --不设最大值nocy…