Cod sursa(job #1080510)

Utilizator misu007Pogonaru Mihai misu007 Data 12 ianuarie 2014 16:27:24
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <cstdio>
using namespace std;

int n,m,a[100000][2];

void init()
{
    for(int i=0;i<n;++i)
    {
        a[i][0]=i;
    }
}

int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf("%d%d",&n,&m);
    init();
    int x,y,e;
    int x1,y1;
    while(m)
    {
        --m;
        scanf("%d%d%d",&e,&x,&y);
        --x;--y;
        x1=x;
        while(a[x1][0]!=x1) x1=a[x1][0];
        while(a[x][0]!=x)
        {
            y1=a[x][0];
            a[x][0]=x1;
            x=y1;
        }
        x1=y;
        while(a[x1][0]!=x1) x1=a[x1][0];
        while(a[y][0]!=y)
        {
            y1=a[y][0];
            a[y][0]=x1;
            y=y1;
        }
        if(e==1)
        {
            if(a[x][1]<a[y][1]) a[x][0]=y;
            else a[y][0]=x;
            if(a[x][1]==a[y][1]) ++a[x][1];
        }
        else
        {
            if(x==y) printf("DA\n");
            else printf("NU\n");
        }
    }
    return 0;
}