Pagini recente » Cod sursa (job #1130858) | Cod sursa (job #2346912) | Cod sursa (job #2868199) | Cod sursa (job #3127375) | Cod sursa (job #2537929)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 100005;
int N, M;
int parent[NMAX], Rank[NMAX];
int findSet(int);
void makeSet(int);
void unionSet(int, int);
inline void Swap(int &a, int &b)
{
a ^= b;
a ^= b;
a ^= b;
}
int main()
{
ios_base::sync_with_stdio(NULL);
cin.tie(NULL), cout.tie(NULL);
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
cin >> N >> M;
for(int i = 1; i <= N; ++i) {
makeSet(i);
}
for(int i = 0; i < M; ++i) {
int v, a, b;
cin >> v;
if(v == 1) {
cin >> a >> b;
unionSet(a, b);
}
if(v == 2) {
cin >> a >> b;
if(findSet(a) == findSet(b))
cout << "DA\n";
else
cout << "NU\n";
}
}
}
int findSet(int v)
{
if(parent[v] == v)
return v;
return parent[v] = findSet(parent[v]);
}
void makeSet(int v)
{
parent[v] = v;
Rank[v] = 1;
}
void unionSet(int a, int b)
{
a = findSet(a);
b = findSet(b);
if(a != b) {
if(Rank[a] < Rank[b])
Swap(a, b);
parent[b] = a;
if(Rank[a] == Rank[b])
Rank[a]++;
}
}