Cod sursa(job #606082)
| Utilizator | Data | 3 august 2011 12:50:03 | |
|---|---|---|---|
| Problema | Paduri de multimi disjuncte | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.72 kb |
#include<fstream.h>
#define N 100001
long n,m,y,z,i,p[N],r[N],x,c,d;
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)
{c=find(p,y),d=find(p,z);
if(r[c]>r[d])
p[d]=c;
else
if(c!=d)
{p[c]=d;
if(r[c]==r[d])
r[d]++;}}
else
if(find(p,y)==find(p,z))
g<<"DA\n";
else
g<<"NU\n";}
return 0;}
