#include<stdio.h> int n,k,D,sum=0; int a[50005]; int kind[50005]; int find(int x) { if(x==a[x]) return x; int t=a[x]; a[x]=find(t); kind[x]=(kind[x]+kind[t])%3; return a[x]; } void zuhe(int x,int y,int d) { int r1=find(x); int r2=find(y); a[r1]=r2;//合并两个节点 kind[r1]=(3-kind[x]+d+kind[y])%3; } int main() { scanf("%d%d",&n,&k); for(int i=0;i<=n;++i) { a[i]=i; kind[i]=0; } for(int i=0;i<k;++i) { int x,y; scanf("%d%d%d",&D,&x,&y); if(x>n||y>n||(D==2&&x==y)) sum++; else { int r1=find(x); int r2=find(y); if(r1==r2) { if((kind[x]-kind[y]+3)%3!=D-1) { sum++; } } else { zuhe(x,y,D-1); } } } printf("%d",sum); return 0; } /************************************************************** Problem: 2238 User: admin Language: C Result: Accepted Time:147 ms Memory:1536 kb ****************************************************************/