简单的并查集的应用,经典题目:
{ Author:wzx961008 Problem:POJ 1182-eat Verdict:Accepted Language:PASCAL Run Time:0.188s AC Date:2011-4-19 } var i,n,k,d,x,y,ans,gx,fx,gy,fy:longint; f,g:array[1..50000]of longint; function find(i:longint):longint; begin if f[i]<>i then f[i]:=find(f[i]); exit(f[i]); end; function getrel(i:longint):longint; begin if f[i]<>i then g[i]:=(getrel(f[i])+g[i]) mod 3; exit(g[i]); end; begin readln(n,k); for i:=1 to n do f[i]:=i; for i:=1 to k do begin readln(d,x,y); dec(d); if (x>n)or(y>n) then begin inc(ans); continue; end; gx:=getrel(x); fx:=find(x); gy:=getrel(y); fy:=find(y); if fx<>fy then begin f[fx]:=fy; g[fx]:=(d-gx+gy+3) mod 3; end else if (gx-gy+3) mod 3<>d then inc(ans); end; writeln(ans); end.