题意:
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; }
时间: 2024-10-12 17:56:51