Cod sursa(job #871607)
| Utilizator | Data | 4 februarie 2013 22:18:35 | |
|---|---|---|---|
| Problema | Paduri de multimi disjuncte | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.54 kb |
#include<fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int i,x,y,z,m,n,T[100001],R[100001];
int tata(int x)
{
if (T[x]!=x) return tata(T[x]);
return x;
}
void uneste(int x,int y)
{
if (R[x]>R[y]) T[y]=x;
else T[x]=y;
if (R[x]==R[y]) R[y]++;
}
int main()
{
in>>n>>m;
for (i=1;i<=n;i++)
{
T[i]=i;
R[i]=1;
}
for (i=1;i<=m;i++)
{
in>>x>>y>>z;
if (x==1) uneste(tata(y),tata(z));
else if(tata(y)==tata(z)) out<<"DA\n";
else out<<"NU\n";
}
}
