Cod sursa(job #1088779)

Utilizator Becu15Coca Cola Octavian Becu15 Data 20 ianuarie 2014 20:08:18
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <stdio.h>

using namespace std;

#define N 100000

int p[N];
int cod,x,y,n,m;

void unionn ()
{
    int loc;
    if(p[x]==0)
        loc=x;
    else
        loc=p[x];

    if(p[y]==0)
    {
        for(int i=1;i<N;i++)
            if(p[i]==y)
                p[i]=loc;
        p[y]=loc;
    }
    else
    {
        for (int i=1;i<N;i++)
            if(p[i]==p[y])
                p[i]=loc;
        p[p[y]]=loc;
    }

    //for (int j=1;j<5;j++)
    //    printf ("%d ",p[j]);
    //printf ("\n");
}
void verif ()
{
    if( (p[x]==p[y]&&p[x]!=0) || (p[x]==y) || (p[y]==x) || x==y)
        printf("DA\n");
    else
        printf("NU\n");
}
int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf("%d %d",&n,&m);
    for(int i=0;i<m;i++)
    {
        scanf("%d %d %d",&cod,&x,&y);
        if (cod==1) unionn();
        else verif();
    }
    return 0;
}