您的位置:首页 > 其它

hdu 3047 Zjnu Stadium(并查集)

2015-03-06 16:36 316 查看
题意:

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]];
return fa[x]=t;
}

int main(){

while(scanf("%d%d",&n,&m)!=EOF){
rep(i,0,n-1){
fa[i]=i;
dis[i]=0;
}

int ans=0;
while(m--){
int a,b,x;
scanf("%d%d%d",&a,&b,&x);
int faa=findFa(a);
int fbb=findFa(b);
if(faa!=fbb){
fa[fbb]=faa;
dis[fbb]=dis[a]+x-dis[b];
}else{
if((dis[fbb]%300)!=((dis[a]+x-dis[b])%300)){
++ans;
}
}
}
printf("%d\n",ans);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: