Cod sursa(job #1542304)

Utilizator ASTELOTudor Enescu ASTELO Data 5 decembrie 2015 11:52:21
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<cstdio>
int fii[100001],parinte[100001],i,j,n,m,k;
int find(int nod)
    {
    int nod1=nod;
    while(parinte[nod1]!=nod1)
        nod1=parinte[nod1];
    int x=nod1;
    nod1=nod;
    while(parinte[nod1]!=nod1)
        {
        parinte[nod1]=x;
        nod1=parinte[nod1];
        }
    return x;
    }
void join(int nod1,int nod2)
    {
    int x=find(nod1);
    int y=find(nod2);
    if(fii[x]<fii[y])
        {
        parinte[x]=y;
        fii[y]+=fii[x];
        }
    else
        {
        parinte[y]=x;
        fii[x]+=fii[y];
        }
    }
int main ()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
    {
    parinte[i]=i;
    fii[i]=1;
    }
for(i=1;i<=m;i++)
    {
    int k,x,y;
    scanf("%d%d%d",&k,&x,&y);
    if(k==2&&find(x)==find(y))
        printf("DA\n");
    else
        if(k==2)
            printf("NU\n");
        else
            join(x,y);
    }
return 0;
}