Cod sursa(job #602241)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 9 iulie 2011 23:25:49
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <cstdio>

using namespace std;

int n,m,r[100001];

int update(int x,int y)
{
    if (r[r[x]]!=r[x])
        r[x]=update(r[x],y);
    else if (y) r[x]=y;
    return r[x];
}

int main()
{
    int i,a,b,c;
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf("%d %d\n",&n,&m);
    for (i=1;i<=n;++i)
        r[i]=i;
    for (i=1;i<=m;++i)
    {
        scanf("%d %d %d\n",&a,&b,&c);
        if (r[r[b]]!=r[b])
            r[b]=update(b,0);
        if (r[r[c]]!=r[c])
            r[c]=update(c,0);
        if (a==1)
        {
            if (r[b]!=r[c])
                r[c]=update(r[c],r[b]);
        }
        else if (r[b]==r[c])
            printf("DA\n");
        else
            printf("NU\n");
    }
    return 0;
}