- 家族
- 2010-03-14 18:32:24 @
var
a:array[1..10000]of longint;
i,j,k,m,n,p,x,y:longint;
procedure wc(x,y:longint);
var i:integer;
begin
i:=1;k:=k+1;
while i0)and(a[y]=0) then a[y]:=a[x]
else if (a[x]=0)and(a[y]>0) then a[x]:=a[y]
else if (a[x]=0)and(a[y]=0) then begin k:=k+1;a[x]:=k;a[y]:=k;end
else if a[x]=a[y] then a[x]:=a[y]
else wc(a[x],a[y]);
end;
for j:=1 to p do
begin
readln(x,y);
if a[x]=a[y] then writeln('Yes')
else writeln('No');
end;
end.
嗯。。谁能告诉我呃。。。这一题错在哪了。。。总是通不过。。。
自己编的测试数据都过了。。但在这测了6次都不行。。我癫狂了嗯。。
3 条评论
-
mfy0120 LV 8 @ 2010-03-14 21:14:14
楼上的回复时间好奇怪...
才20:12啊?
-
2010-03-14 20:47:32@
请用并查集谢谢
#include
using namespace std;
int s[5001],n,m,p,a,b;
//寻找两个元素的最久远祖先是否相同
int find(int x)
{
if(s[x]==-1) return x;
else return s[x]=find(s[x]);
}
int init()
{
int x1,y1,i;
cin>>n>>m>>p;
for(i=0;ia>>b;
x1=find(a);
y1=find(b);
if(x1!=y1)
s[x1]=y1; }
}
int main(void) {
init();
int x,y,i;
for(i=1;i>a>>b;
x=find(a);
y=find(b);
if(x==y)
cout -
2010-03-14 19:24:34@
看你可怜
看你可怜,我就把第二组数据发给你吧。下不为例!
输入:
100 10 20
5 67
59 56
68 74
39 99
28 13
8 60
33 68
18 31
79 84
55 72
81 28
30 67
6 36
59 29
23 8
15 63
9 96
16 78
56 86
61 53
64 3
31 23
88 5
46 57
59 77
93 31
76 93
37 92
86 80
88 22正确答案:
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
- 1