Pagini recente » Cod sursa (job #2331790) | Cod sursa (job #2279708) | Cod sursa (job #1483399) | Cod sursa (job #1321944) | Cod sursa (job #3152137)
#include <bits/stdc++.h>
using namespace std;
vector <int> par;
vector <int> sz;
void initialize (int n)
{
par.resize(n+1);
sz.resize(n+1 , 1);
for (int i = 1; i <= n; i++)
{
par[i] = i;
}
}
int Find (int nod)
{
if (par[nod] == nod) return nod;
else return par[nod] = Find(par[nod]);
}
void unite (int x , int y)
{
int repX = Find(x) , repY = Find(y);
//if (s[repX] < s[repY]) swap(repX , repY);
if (repX != repY)
{
if(sz[repX] > sz[repY])
par[repY]=repX, sz[repX]+=sz[repY];
else
par[repX]=repY, sz[repY]+=sz[repX];
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int n, m;
cin>>n>>m;
initialize(n);
int caz, a, b;
for(int i=1; i<=m; i++)
{
cin>>caz>>a>>b;
if(caz==1)
unite(a, b);
else
cout<<(Find(a)==Find(b) ? "DA\n" : "NU\n");
}
return 0;
}