Pagini recente » Cod sursa (job #929404) | Cod sursa (job #108629) | Cod sursa (job #831316) | Cod sursa (job #458865) | Cod sursa (job #2378177)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int N=100009;
int n,m,x,y,c;
int t[N],r[N];
void unite(int x,int y)
{
if(r[x]<=r[y])
t[x]=y;
else
t[y]=x;
if(r[x]==r[y])
r[y]++;
}
int Find(int x)
{
int y=x,z;
for(;y!=t[y];y=t[y]);
for(;t[x]!=x;)
{
z=t[x];
t[x]=y;
x=z;
}
return y;
}
void query()
{
if(c==1)
unite(Find(x),Find(y));
else
fout<<(Find(x)==Find(y) ? "DA\n" : "NU\n" );
}
int main()
{
fin.sync_with_stdio(false);
fin>>n>>m;
for(int i=1;i<=n;i++)
t[i]=i,r[i]=1;
for(int i=1;i<=m;i++)
{
fin>>c>>x>>y;
query();
}
return 0;
}