Pagini recente » Cod sursa (job #1545981) | Cod sursa (job #1332884) | Cod sursa (job #1741006) | Cod sursa (job #953390) | Cod sursa (job #2287178)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
#define NMAX 100020
int rang[NMAX],v[NMAX];
int rad(int x)
{
int r=x,aux;
//cautare radacina
while(v[r]!=r)
r=v[r];
//compresia drumurilor
while(x!=v[x])
{
aux = v[x];
v[x] = r;
x = aux;
}
return r;
}
void unite(int x,int y)
{
if(rang[x]>rang[y])
v[y]=x;
else v[x]=y;
if(rang[x]==rang[y])
rang[y]++;
}
int main()
{
int n,m,x,y,cod;
in >> n >> m;
for(int i=1;i<=n;i++)
{
v[i]=i;
rang[i]=1;
}
for(int i=1;i<=m;i++)
{
in >> cod >> x >> y;
if(cod==2)
{
if(rad(x)==rad(y))
out << "DA" << '\n';
else out << "NU" << '\n';
}
else unite(rad(x),rad(y));
}
return 0;
}