Cod sursa(job #952472)

Utilizator primulDarie Sergiu primul Data 23 mai 2013 15:47:25
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<stdio.h>
#include<vector>
int parent[100100];
int N,M,x,y,z;
 
int root(int k)
{
    int ret=k;
    while(parent[ret])
    {
        ret=parent[ret];
    }
    return ret;
}
 
void compress(int k)
{
    int temp=k;
    int r=root(k);
    while(parent[temp])
    {
        int temp1=parent[temp];
        parent[temp]=r;
        temp=temp1;
    }
}
 
 
 
int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf("%d%d",&N,&M);
 
    for(int i=1;i<=M;++i)
    {
        scanf("%d%d%d",&x,&y,&z);
        if(x==2)
        {
            if(root(y)==root(z))
               printf("DA\n");
            else
                printf("NU\n");
            compress(y);
            compress(z);
        }
        if(x==1)
        {
            int d=root(y);
            int e=root(z);
            parent[d]=e;
           /* for(int j=1;j<=N;++j)
            {
                printf("%d %d\n",j,parent[j]);
            }
            printf("\n");*/
        }
    }
    return 0;
 
}