Cod sursa(job #830893)

Utilizator dobrebogdanDobre Bogdan Mihai dobrebogdan Data 7 decembrie 2012 20:18:58
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include<stdio.h>
int t[100005],h[100005];
int find(int x)
{
    if(t[x]==x)
    return x;
    return find (t[x]);
}
int unite(int u,int v)
{
if(u==v)
return 0;
else
    if(h[u]==h[v])
    {
        t[v]=u;
        h[u]++;
    }
    else
    if(h[u]<h[v])
    t[u]=v;
    else
    t[v]=u;
}
int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    int n,m,i,j,cod,x,y,z,v;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    t[i]=i;
    for(i=1;i<=m;i++)
    {
    scanf("%d%d%d",&cod,&x,&y);
    if(cod==1)
        unite(x,y);
        else
        {
        z=find(x);
        v=find(y);
        if(z==v)
        printf("DA\n");
        else
        printf("NU\n");
        }
    }
    return 0;
}