Pagini recente » Cod sursa (job #1009651) | Cod sursa (job #2182520) | Cod sursa (job #2435317) | Cod sursa (job #627068) | Cod sursa (job #3272913)
#include <bits/stdc++.h>
using namespace std;
const int N_MAX = 1e5 + 5;
int N, M;
int T[N_MAX];
int Rank[N_MAX];
void SetInput(string name)
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
(void)!freopen((name + ".in").c_str(), "r", stdin);
(void)!freopen((name + ".out").c_str(), "w", stdout);
}
int FindSet(int nod)
{
if(T[nod] != nod)
T[nod] = FindSet(T[nod]);
return T[nod];
}
void UniteSet(int a, int b)
{
a = FindSet(a);
b = FindSet(b);
if(a == b)
return;
if(Rank[a] < Rank[b])
swap(a, b);
T[b] = a;
if(Rank[a] == Rank[b])
Rank[a]++;
}
void ReadInput()
{
cin >> N >> M;
}
void Solve()
{
for(int i = 1; i <= N; i++)
{
T[i] = i;
Rank[i] = 1;
}
for(int i = 0, t, a, b; i < M; i++)
{
cin >> t >> a >> b;
switch(t)
{
case 1:
UniteSet(a, b);
break;
case 2:
if(FindSet(a) == FindSet(b))
cout << "DA\n";
else
cout << "NU\n";
break;
}
}
}
int main()
{
SetInput("disjoint");
ReadInput();
Solve();
return 0;
}