1 条题解
-
0
#include<bits/stdc++.h> using namespace std; const int N=50010; int f[N],d[N],n,k,cnt; int find(int x) { if(f[x]!=x) { int tmp=find(f[x]); d[x]+=d[f[x]]; f[x]=tmp; } return f[x]; } int main() { scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) f[i]=i; while(k--) { int op,a,b; scanf("%d%d%d",&op,&a,&b); if(a>n or b>n or op==2 and a==b) { cnt++; continue; } int fa=find(a); int fb=find(b); if(fa==fb) { if(op==1 and (d[a]-d[b])%3!=0 or op==2 and (d[a]-d[b]-1)%3!=0) cnt++; } else { f[fa]=fb; if(op==1) d[fa]=d[b]-d[a]; else d[fa]=d[b]-d[a]+1; } } printf("%d\n",cnt); return 0; }
- 1
信息
- ID
- 6075
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 4
- 标签
- 递交数
- 56
- 已通过
- 17
- 上传者