Pagini recente » Cod sursa (job #653602) | Cod sursa (job #3171351) | Cod sursa (job #142029) | Cod sursa (job #2931372) | Cod sursa (job #2578396)
#include <bits/stdc++.h>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
const int NMAX=100005;
int n,m,op,x,y,rang[NMAX],t[NMAX];
int radacina(int k)
{
if(t[k]==0)
return k;
else
{
int x=radacina(t[k]);
t[k]=x;
return x;
}
}
void unire(int k,int p)
{
int rk=radacina(k),rp=radacina(p);
if(rk!=rp)
{
if(rang[rk]>rang[rp])
t[rp]=rk;
else
{
t[rk]=rp;
if(rang[rk]==rang[rp])
rang[rp]++;
}
}
}
int main()
{
f>>n>>m;
for(int i=1; i<=m; i++)
{
f>>op>>x>>y;
if(op==1)
unire(x,y);
else
{
if(rang[x]==rang[y])
g<<"NU";
else
g<<"DA";
g<<"\n";
}
}
return 0;
}