- 家族
- 2009-06-13 20:37:42 @
program t1;
var
set1:array[1..5000]of integer;
m,n,p:integer;
i,j:integer;
function find(k:integer):integer;
begin
exit(set1[k]);
end;
procedure merge(a,b:integer);
var
i:integer;
begin
for i:=1 to n do
if set1[i]=b then set1[i]:=a;
end;
procedure init;
var
a,b:integer;
begin
readln(n,m,p);
fillchar(set1,sizeof(set1),0);
for i:=1 to n do
set1[i]:=i;
for i:=1 to m do
begin
readln(a,b);
merge(a,b);
end;
end;
var
a,b:integer;
begin
init;
for i:=1 to p do
begin
readln(a,b);
if find(a)=find(b) then
writeln('Yes') else writeln('No');
end;
end.
1 条评论
-
w卡e丹s裘t LV 6 @ 2009-06-13 21:25:19
。。。。
。首先有一个很明显的错误。。
比如说
这个数据
(以下直接是亲属关系)
1 2
2 3
按照你的程序,在读入第1组的时候后
set[1] = 1 set[2] = 1 set[3] = 3
读入第2组后
set[1] = 1 set[2] = 1 set[3] = 2
所以在判断1和3的亲属关系的时候就会出错。
其次你的程序时间效率太低,写并查集吧~很短。
- 1