Pagini recente » Cod sursa (job #1023878) | Cod sursa (job #1076431) | Cod sursa (job #251156) | Cod sursa (job #260138) | Cod sursa (job #1338165)
#include <bits/stdc++.h>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
vector<int> t,h;
void unite(int x,int y)
{
if(h[x]>h[y])t[y]=x;
else t[x]=y;
if(h[x]==h[y])h[y]++;
}
int rad(int x)
{
int r,y;
for(r=x;t[r]!=r;r=t[r]);
while(t[x]!=x)
{
y=t[x];
t[x]=r;
x=y;
}
return r;
}
int main()
{
int n,m,x,y,op;
in>>n>>m;
t=h=vector<int>(n+1);
for(int i=1;i<=n;i++)t[i]=i;
for(;m;m--)
{
in>>op>>x>>y;
if(op==1)unite(rad(x),rad(y));
else out<<(rad(x)==rad(y) ? "DA" : "NU")<<'\n';
}
return 0;
}