讨论 / p331 家族 为什么我 的 程序只有20分..
sesame 2010-10-04 23:14:00
点我顶贴 收藏 删除
我看不错 错误 希望大牛们指点

program family;

var root:array[0..5000]of longint;

i,j,k,m,n,p,x,y:longint;

procedure find_root(x:longint);

begin

if root[x]=x then exit;

find_root(root[x]);

root[x]:=root[root[x]];

end;

begin

read(n,m,p);

for i:= 1 to n do

root[i]:=i;

for i:= 1 to m do

begin

read(x,y);

find_root(x);

find_root(y);

if root[x]<>root[y] then

root[y]:=x;

end;

for i:= 1 to p do

begin

read(x,y);

find_root(x);

find_root(y);

if root[x]=root[y] then

writeln(’Yes’)

else

writeln(’No’);

end;

end.

#1 sesame@2009-08-04 01:10:00
回复 删除
是我 看不出 错误..
#2 noip2012@2010-07-23 04:40:00
回复 删除
查找的过程可能有问题

function findset(x:longint);longint;

begin

if father[x]=x then

findset:=x

else

begin

father[x]:=findset(father[x]);

findset:=father[x];

end;

end;

#3 hotshot威@2010-08-10 20:23:00
回复 删除
感叹,世俗悲凉。

人品问题啊! 哎,悲剧!

#4 我不是白痴@2010-10-04 23:14:00
回复 删除
并查集》》》》》》》》》》》》》》》》》》》》》》》
#5 NEW WORLD@2014-07-05 01:44:06
回复 删除
program Project1;

var

n,p,m,i,x,y:longint;

f:array[1..5000]of longint;

function gf(t:longint):longint;

begin

if f[t]=t then exit(t);

f[t]:=gf(f[t]);

exit(f[t]);

end;

procedure mm(j,k:longint);

begin

j:=gf(j);

k:=gf(k);

f[j]:=k;

end;

procedure pan(j,k:longint);

begin

j:=gf(j);

k:=gf(k);

if j=k then writeln('Yes')

else writeln('No');

end;

begin

readln(n,m,p);

for i:=1 to n do

f[i]:=i;

for i:=1 to m do

begin

read(x,y);

mm(x,y)

end;

for i:=1 to p do

begin

read(x,y);

pan(x,y);

end;

readln;

readln;

end.

查看更多回复
提交回复