Cod sursa(job #588297)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 7 mai 2011 17:15:21
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include<fstream.h>
#define N 100001
long n,m,y,z,i,p[N],r[N],x,ci,cj;
long find(long p[N],long i)
{if(p[i]==i)
     return i;
return p[find(p,p[i])];}
int main()
{ifstream f("disjoint.in");
ofstream g("disjoint.out");
f>>n>>m;
for(i=1;i<=n;i++)
     p[i]=i,r[i]=0;
while(m--)
     {f>>x>>y>>z;
     if(x==1)
            {ci=find(p,y),cj=find(p,z);
            if(r[ci]>r[cj])
                    p[cj]=ci;
            else
                    if(ci!=cj)
                          {p[ci]=cj;
                          if(r[ci]==r[cj])
                                 r[cj]++;}}
     else
            if(find(p,y)==find(p,z))
                     g<<"DA\n";
            else
                     g<<"NU\n";}
f.close();
g.close();
return 0;}