Description
小希非常喜欢玩迷宫游戏,现在她自己设计了一个迷宫游戏。在她设计的迷宫中,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走了回头路)。小希现在把她的设计图给你,让你帮忙判断她的设计图是否符合她的设计思路。比如下面的例子,前两个是符合条件的,但是最后一个却有两种方法从5到达8。
Sample Input
6 8 5 3 5 2 6 4
5 6 0 0
8 1 7 3 6 2 8 9 7 5
7 4 7 8 7 6 0 0
3 8 6 8 6 4
5 3 5 6 5 2 0 0
-1 -1
Sample Output
1
1
0
如果一个图中出现环,那么必定输出0,用并查集判断两个点是否已经相连,如果之前已经相连,那么连上这条边就会出现环。
var
f:array[1..110000] of longint;
s:array[1..110000] of boolean;
i,x,y,l,k,d,b:longint;
t:boolean;
function find(z:longint):longint;
begin
if f[z]=z then
exit(z);
f[z]:=find(f[z]);
exit(f[z]);
end;
begin
read(x,y);
while (x<>-1)and(y<>-1) do
begin
i:=0;b:=0;d:=0;
t:=true;
for i:=1 to 100000 do
begin f[i]:=i;s[i]:=false;end;
while (x<>0)and(y<>0) do
begin
inc(i);
l:=find(x);k:=find(y);
if not s[x] then inc(d);
if not s[y] then inc(d);
s[x]:=true;
s[y]:=true;
if l=k then t:=false;
f[l]:=k;
read(x,y);
inc(b);
end;
if b<>d-1 then t:=false;
if t then writeln(1)
else writeln(0);
read(x,y);
end;
end.