Pagini recente » Cod sursa (job #2205121) | Cod sursa (job #2422109) | Cod sursa (job #1141772) | Cod sursa (job #655703) | Cod sursa (job #2512542)
#include <fstream>
using namespace std;
int p[100001],h[100001];
ifstream in ("disjoint.in");
ofstream out ("disjoint.out");
void _init(int n)
{
for (int i=1;i<=n;i++)
p[i]=i,h[i]=1;
}
int _find(int x)
{
int r=x;
while (p[r]!=r)
r=p[r];
while (p[x]!=r)
{
int tmp=p[x];
p[x]=r;
x=tmp;
}
return r;
}
void _union(int x,int y)
{
int radx,rady;
radx=_find(x),rady=_find(y);
if (h[radx]>h[rady])
p[rady]=radx;
else if (h[radx]<h[rady])
p[radx]=rady;
else
p[radx]=rady,h[rady]++;
}
int main()
{
int n,m,i,t,x,y;
in>>n>>m;
_init(n);
for (i=1;i<=m;i++)
{
in>>t>>x>>y;
if (t==1)
_union(x,y);
else
{
int radx=_find(x),rady=_find(y);
if (radx!=rady)
out<<"NU"<<'\n';
else
out<<"DA"<<'\n';
}
}
return 0;
}