今天晴天 » 日志 » 小胖的奇偶
小胖的奇偶
Tsing 发表于 2006-11-13 17:27:48
居然可以过4个,我提交了n次才发现的……变量定义啊我一直以为不会出错的。 T_T
下面是小胖的奇偶:
type pt=array[0..100000] of longint;
var
p,d,rank,node:pt;
x,y,t1,t2,t,n,m,i:longint;
s:string;
procedure union(x,y:longint);
begin
if rank[x]>rank[y] then
p[y]:=x else begin
p[x]:=y;
if rank[x]=rank[y] then inc(rank[y]);
end;
end;
function findset(x:longint):longint;
begin
if p[x]<>x then p[x]:=findset(p[x]);
exit(p[x]);
end;
begin
readln(n);
readln(m);
node[1]:=0;
for i:=1 to 2*m do
d[i]:=-1;
for i:=1 to m do begin
read(x,y);
t1:=1; dec(x);
while (t1<=t)and(node[t1]<>x) do inc(t1);
if t1>t then begin
inc(t); node[t]:=x;
p[t]:=t; rank[t]:=0;
end;
t2:=1;
while (t2<=t)and(node[t2]<>y) do inc(t2);
if t2>t then begin
inc(t); node[t]:=y;
p[t]:=t; rank[t]:=0;
end;
readln(s);
if s[length(s)]='n' then
if (findset(d[t1])=findset(t2))or(findset(t1)=findset(d[t2])) then begin
writeln(i-1);
halt;
end else begin
if findset(t1)<>findset(t2) then
union(findset(t1),findset(t2));
if findset(d[t1])<>findset(d[t2]) then
union(findset(d[t1]),findset(d[t2]));
end;
if s[length(s)]='d' then begin
if d[t1]=-1 then d[t1]:=t2;
if d[t2]=-1 then d[t2]:=t1;
if (findset(t1)=findset(t2))or(findset(d[t1])=findset(d[t2])) then begin
writeln(i-1);
halt;
end else
if findset(d[t1])<>findset(t2) then union(findset(d[t1]),findset(t2));
if findset(t1)<>findset(d[t2]) then union(findset(t1),findset(d[t2]));
end;
end;
writeln(m);
end.
6、10个数据错了,原因暂时不明中,有空再改了 T_T

