Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
pascalvar father,dis:array [0..50000] of longint; n,m,ans:longint; procedure init; var i:longint; begin readln(n,m); ans:=0; for i:=1 to n do father[i]:=i; for i:=1 to n do dis[i]:=0; end; function getfather(x:longint):longint; var pre:longint; begin if father[x]=x then exit(x); pre:=getfather(father[x]); inc(dis[x],dis[father[x]]); dis[x]:=dis[x] mod 3; father[x]:=pre; exit(pre); end; function union(x,y,z:longint):longint; var xx,yy:longint; begin xx:=getfather(x); yy:=getfather(y); if xx=yy then begin if (z=1) and (dis[x]=dis[y]) then exit(0); if (z=2) and (dis[x]=2) and (dis[y]=0) then exit(0); if (z=2) and (dis[x]=0) and (dis[y]=1) then exit(0); if (z=2) and (dis[x]=1) and (dis[y]=2) then exit(0); exit(1); end; if dis[x]=1 then dis[xx]:=2 else if dis[x]=2 then dis[xx]:=1; if dis[y]=1 then dis[yy]:=2 else if dis[y]=2 then dis[yy]:=1; father[xx]:=x; father[yy]:=y; father[x]:=y; father[y]:=y; dis[y]:=0; if z=1 then dis[x]:=0 else dis[x]:=2; exit(0); end; procedure main; var i,x,y,z:longint; begin for i:=1 to m do begin readln(z,x,y); if (z=2) and (x=y) then begin inc(ans); continue; end; if (x>n) or (y>n) then begin inc(ans); continue; end; ans:=ans+union(x,y,z); end; writeln(ans); end; procedure openfile; begin assign(input,'1.in'); reset(input); assign(output,'1.out'); rewrite(output); end; begin //openfile; init; main; end. Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator