Cod sursa(job #550786)
# include <fstream>
using namespace std;
ifstream f ("disjoint.in");
ofstream g ("disjoint.out");
int x,y,q,n,m,i,t[100005],h[100005];
int rad (int x)
{
if (t[x]==x)
return x;
else
return rad (t[x]);
}
void uneste (int x,int y)
{
int xx=rad (x);
int yy=rad (y);
if (h[xx]<h[yy])
t[xx]=yy;
else
if (h[xx]>h[yy])
t[yy]=xx;
else
{
t[xx]=yy;
h[yy]++;
}
}
int main ()
{
f>>n>>m;
for (i=1;i<=n;i++)
{
t[i]=i;
h[i]=1;
}
for (i=1;i<=m;i++)
{
f>>q>>x>>y;
if (q==1)
uneste (x,y);
else
{
if (rad (x)==rad (y))
g<<"DA\n";
else
g<<"NU\n";
}
}
return 0;
}