/ Vijos / 讨论 / 家族 /

Help!!Help!!I need some help....

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 条评论

  • @ 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

信息

ID
1034
难度
4
分类
数据结构 | 并查集 点击显示
标签
(无)
递交数
9379
已通过
3848
通过率
41%
被复制
16
上传者