Cod sursa(job #285153)

Utilizator ConsstantinTabacu Raul Consstantin Data 22 martie 2009 13:35:40
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include<stdio.h>
#define Nmax 100002

int i,j,k,l,m,n,tip[Nmax],ant[Nmax],ult[Nmax];

void merge(int a,int b){
ant[ult[a]]=b;
ult[a]=ult[b];
int i;
i=b;
do
        {tip[i]=a;
        i=ant[i];
        }
while(i);
}

int main(){

freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);

scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)
        {tip[i]=i;
        ult[i]=i;
        }

for(i=1;i<=m;i++)
        {scanf("%d %d %d",&j,&k,&l);
        if(j==2)
              {if(tip[k]==tip[l])printf("%s\n","DA");
              else
              printf("%s\n","NU");
              }
       else
       merge(k,l);
        }
return 0;}