HDU 3407.Zjnu Stadium 加权并查集

Zjnu Stadium

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3726    Accepted Submission(s): 1415

Problem Description

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)

Source

2009 Multi-University Training Contest 14 - Host by ZJNU

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3047

题意:n个点,m个关系。每个关系有3个整数a,b,x表示为a到b的距离为x。问m个关系中有几个不合理的。

思路:并查集,在压缩路径的时候顺便处理一下距离dist[x]+=dist[pa[x]]。关系合并时距离关系为:dist[fb]=dist[a]+x-dist[b](fb为b的祖先;dist[a],diat[b]分别表示a,b到祖先的距离)。

代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
#include<stack>
#include<vector>
#include<set>
using namespace std;
#define PI acos(-1.0)
typedef long long ll;
typedef pair<int,int> P;
const int maxn=1e5+100,maxm=1e5+100,inf=0x3f3f3f3f,mod=1e9+7;
const ll INF=1e13+7;
int pa[maxn];
int dist[maxn];
void init(int n)
{
    for(int i=1; i<=n; i++)
        pa[i]=i,dist[i]=0;
}
int findset(int x)
{
    if(pa[x]==x) return x;
    int fax=pa[x];
    pa[x]=findset(pa[x]);
    dist[x]+=dist[fax];
    return pa[x];
}
void unit(int x,int y,int w)
{
    int fx=findset(x),fy=findset(y);
    pa[fx]=fy;
    dist[fx]=dist[y]+w-dist[x];
}
bool same(int x,int y,int w)
{
    if(findset(x)!=findset(y)) return false;
    else if(dist[findset(x)]==dist[y]+w-dist[x]) return false;
    else return true;
}
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        int ans=0;
        init(n);
        for(int i=1; i<=m; i++)
        {
            int a,b,x;
            scanf("%d%d%d",&a,&b,&x);
            if(same(a,b,x)) ans++;
            else unit(a,b,x);
        }
        cout<<ans<<endl;
    }
    return 0;
}

加权并查集

时间: 2024-10-12 18:34:21

HDU 3407.Zjnu Stadium 加权并查集的相关文章

hdu 3047 Zjnu Stadium(并查集)

题意: 300个座位构成一个圈. 有N个人要入座. 共有M个说明 :A B X ,代表B坐在A顺时针方向第X个座位上.如果这个说明和之前的起冲突,则它是无效的. 问总共有多少个无效的. 思路: 并查集的询问方式,,,, 直接看代码吧! 代码: int n,m; int fa[50005]; int dis[50005]; int findFa(int x){ if(fa[x]==x) return fa[x]; int t=findFa(fa[x]); dis[x]+=dis[fa[x]]; r

hdu3047 Zjnu Stadium (并查集)

Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1686    Accepted Submission(s): 634 Problem Description In 12th Zhejiang College Students Games 2007, there was a new stadium built i

HDU 2818 Building Block 加权并查集

Building Block                                                                      Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4548    Accepted Submission(s): 1408 Problem Description John

Zjnu Stadium(加权并查集)

Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3186    Accepted Submission(s): 1226 Problem Description In 12th Zhejiang College Students Games 2007, there was a new stadium built

HDU 3047 Zjnu Stadium 带权并查集

题目来源:HDU 3047 Zjnu Stadium 题意:给你一些人 然后每次输入a b c 表示b在距离a的右边c处 求有多少个矛盾的情况 思路:用sum[a] 代表a点距离根的距离 每次合并时如果根一样 判断sum数组是否符合情况 根不一样 合并两棵树 这里就是带权并查集的精髓 sum[y] = sum[a]-sum[b]+x 这里y的没有合并前b的根 #include <cstdio> #include <cstring> using namespace std; cons

hdu 3047 Zjnu Stadium 并查集高级应用

Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1631    Accepted Submission(s): 616 Problem Description In 12th Zhejiang College Students Games 2007, there was a new stadium built

P1196 银河英雄传说(加权并查集)

P1196 银河英雄传说 题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压 顶集团派宇宙舰队司令莱因哈特率领十万余艘战舰出征,气吞山河集团点名将杨 威利组织麾下三万艘战舰迎敌. 杨威利擅长排兵布阵,巧妙运用各种战术屡次以少胜多,难免恣生骄气.在 这次决战中,他将巴米利恩星域战场划分成30000列,每列依次编号为1, 2, …, 30000.之后

uva 12232 - Exclusive-OR(加权并查集)

题目链接:uva 12232 - Exclusive-OR 题目大意:有n个数,一开始并不知道具体的值,现在进行Q次操作. I u k:au的值为k I u v k:au?av=k Q k q1q2-qk:求q1?q2-?qk 对于Q操作不能确定的话输出"I don't know." 对于I操作矛盾的话则输出是第几条I操作出现矛盾的,并且停止后面所有的操作. 解题思路:加权并查集,f[x]表示x节点父亲节点,d[x]表示x节点与其父节点的亦或值,对于确定的节点值,可以将父亲节点设为0,

HDU 3635 延缓更新的并查集

Dragon Balls Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2839    Accepted Submission(s): 1097 Problem Description Five hundred years later, the number of dragon balls will increase unexpecte