为啥错了,看了好长时间了

P3367 【模板】并查集

jhb518619 @ 2016-11-17 11:37:04

#include<stdio.h>
int a[20000],n,m,s[100],z[100];
void init()
{
    int i;
    for(i=1;i<=n;i++)
    {
        a[i]=i;
    }return;
}
int getf(int i)
{
    if(a[i]==i)
    return i;
    else
    a[i]=getf(a[i]);
    return a[i];
}
void merge(int x,int y)
{
    int t1,t2;
    t1=getf(x);
    t2=getf(y);
    if(t1!=t2)
    a[t2]=t1;
    return;
}
int main()
{
    int k,l,h,i,w=0,u=0;
    scanf("%d%d",&n,&m);
    init();
    for(i=1;i<=m;i++)
    {
     scanf("%d",&k);
     scanf("%d%d",&l,&h);
     if(k==1)
     {
         merge(l,h);
     }
     else
      {
          if(a[l]==a[h])
        printf("Y\n");
        else     printf("N\n");
     }    
    }
}

by huhuhuhaha @ 2016-11-17 13:00:14

@jhb518619 应该是最后输出Y和N的时候错了,把if a[l]==a[h]改成if getf(l)==getf(h)试试


by jhb518619 @ 2016-11-17 16:17:29

谢谢,改完之后就对了@ Microsoft


|