hdu 3047 Zjnu Stadium(加权并查集)2009 Multi-University Training Contest 14
题意:
有一个运动场,运动场的坐席是环形的,有1~300共300列座位,每列按有无限个座位计算T_T。
输入:
有多组输入样例,每组样例首行包含两个正整数n, m。分别表示共有n个人,m次操作。
接下来m行,每行包含a, b, x三个整数,表示a在b右边x个位置。
输出:
如果a,b的关系已经存在,新操作如果获得的位置关系与已存在的关系不同,则ans+1。输出ans,每组输出占一行。
用加权并查集可以解决。权值存在val[]数组里,val[i]的含义为从i到根节点的距离。
由于是一个长度为300的环形座位,所以每次算得的结果都需要mod 300(然而实际上不mod 300也可以ac)。
具体见代码——
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std; const int N = ;
const int M = ; int fm[N], val[N];
int a, b, x;
int n, m;
int ans; void init()
{
for(int i = ; i <= n; i++)
{
fm[i] = i;
val[i] = ;
}
ans = ;
} int mfind(int x)
{
if(x == fm[x]) return x;
int t = fm[x];
fm[x] = mfind(fm[x]);
val[x] += val[t];
val[x] %= M;
return fm[x];
} void mmerge()
{
int fx = mfind(a);
int fy = mfind(b);
if(fx != fy)
{
fm[fx] = fy;
val[fx] += val[b]-val[a]+x; //由于需要获得的是从fx到fy的距离,所以需要以b与a的相对距离再加上x
val[fx] %= M;
}
else
{
if((val[a]-val[b]+M)%M != x%M) ans++;
}
} void work()
{
while(m--)
{
scanf("%d%d%d", &a, &b, &x);
mmerge();
}
printf("%d\n", ans);
} int main()
{
//freopen("test.in", "r", stdin);
while(~scanf("%d%d", &n, &m))
{
init();
work();
}
return ;
}
hdu 3047 Zjnu Stadium(加权并查集)2009 Multi-University Training Contest 14的更多相关文章
- HDU 3407.Zjnu Stadium 加权并查集
Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- hdu 3047 Zjnu Stadium(并查集)
题意: 300个座位构成一个圈. 有N个人要入座. 共有M个说明 :A B X ,代表B坐在A顺时针方向第X个座位上.如果这个说明和之前的起冲突,则它是无效的. 问总共有多少个无效的. 思路: 并查集 ...
- hdu 3047 Zjnu Stadium 并查集高级应用
Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- HDU 3047 Zjnu Stadium(带权并查集)
http://acm.hdu.edu.cn/showproblem.php?pid=3047 题意: 给出n个座位,有m次询问,每次a,b,d表示b要在a右边d个位置处,问有几个询问是错误的. 思路: ...
- 【带权并查集】HDU 3047 Zjnu Stadium
http://acm.hdu.edu.cn/showproblem.php?pid=3047 [题意] http://blog.csdn.net/hj1107402232/article/detail ...
- HDU 3047 Zjnu Stadium(带权并查集,难想到)
M - Zjnu Stadium Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Su ...
- HDU 3047 带权并查集 入门题
Zjnu Stadium 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3047 Problem Description In 12th Zhejian ...
- hdu3047 Zjnu Stadium (并查集)
Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- hdu 3047–Zjnu Stadium(带权并查集)
题目大意: 有n个人坐在zjnu体育馆里面,然后给出m个他们之间的距离, A B X, 代表B的座位比A多X. 然后求出这m个关系之间有多少个错误,所谓错误就是当前这个关系与之前的有冲突. 分析: 首 ...
随机推荐
- hdu 4701 Game 博弈论
思路: ▶ 设 win(i,x,y) 表示当前可以买的物品是 i,先手有 x 元,后 手有 y 元时,先手是否必胜 ▶ win(i,x,y) ⇐⇒∃j((j > i)∧(x ≥ si−sj)∧¬ ...
- linux 命令小例
xargs示例: ls |xargs -i mv {} /opt find示例: find -mtime +n -name “*.avi” -type f -exec rm {} \; find - ...
- 匿名用户访问sharepoint2010中的列表
Allow anonymous users to access listitems on a publishing site in SharePoint 2010 https://knowledge. ...
- 查找数N二进制中1的个数(JS版 和 Java版)
(function(){ function getOne(n) { var c = 0; for(var i = 0;i < 32;i ++){ if(((1 << i) & ...
- 从svn删除文件夹和文件
由于项目开始放在自己项目组的一个服务器上,而且svn也是自己在该服务器上搭建的,但是不知道是什么原因,svn上的代码被误删了.为了更稳定地使用svn,所以使用公司的svn来管理代码. 运维将不是最新版 ...
- C# Java间进行RSA加密解密交互(二)
原文:C# Java间进行RSA加密解密交互(二) 接着前面一篇文章C# Java间进行RSA加密解密交互,继续探讨这个问题. 在前面,虽然已经实现了C# Java间进行RSA加密解密交互,但是还是与 ...
- 你真的了解try{ return }finally{}中的return?
你真的了解try{ return }finally{}中的return? 今天去逛论坛 时发现了一个很有趣的问题: 谁能给我我解释一下这段程序的结果为什么是:2.而不是:3 代码如下: class ...
- create user 'root'@'localhost' identified by 。。。
- 10个用于Web开发的最好 Python 框架
Python 是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Python甚至还 ...
- (2)WinForm中改变Tab选项卡的顺序
Tab选项卡选中,在其属性中找到TabPages这个属性.点进去,可以通过上下移动标签卡改变标签卡的顺序.