AcWing 240. 食物链(我这个菜鸟尽力了......)
原题链接
中等
作者:
wangyj
,
2020-10-17 11:17:11
,
所有人可见
,
阅读 402
加油加油💪
#include<iostream>
using namespace std;
int p[50010],d[50010];
int find(int x)
{
int t;
if(p[x]!=x){
t=find(p[x]);
d[x]+=d[p[x]],p[x]=t;
}
return p[x];
}
int main()
{
int n,m,i,ans=0,t,x,y,px,py;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)p[i]=i;
while(m--){
scanf("%d%d%d",&t,&x,&y);
if(x>n||y>n)ans++;
else{
px=find(x),py=find(y);
if(t==1){
if(px==py&&(d[x]-d[y])%3)ans++;
else if (px!=py)p[px]=py,d[px]=d[y]-d[x];
}
else{
if(px==py&&(d[x]-d[y]-1)%3)ans++;
else if(px!=py)p[px]=py,d[px]=d[y]+1-d[x];
}
}
}
printf("%d\n", ans);
return 0;
}