Pagini recente » Cod sursa (job #1695174) | Cod sursa (job #111747) | Cod sursa (job #2855433) | Cod sursa (job #2546751) | Cod sursa (job #2935397)
#include <bits/stdc++.h>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
class DSU
{
vector<int> uf;
public:
DSU(int N = 0)
{
uf.assign(N, -1);
}
int Find(int node)
{
if(uf[node] <= -1)
return node;
else return (uf[node] = Find(uf[node]));
}
void Union_elem(int x, int y)
{
int T1 = Find(x);
int T2 = Find(y);
if(T1 == T2)
return;
if(x > y)
swap(x,y);
uf[x] += uf[y];
uf[y] = x;
}
};
int main()
{
int N, M;
in >> N >> M;
DSU S(N + 1);
while(M--)
{
int c, x, y;
in >> c >> x >> y;
if(c == 1)
{
S.Union_elem(x,y);
}
else
{
int Tx = S.Find(x);
int Ty = S.Find(y);
if(Tx == Ty && Tx != -1)
out << "DA\n";
else
out << "NU\n";
}
}
return 0;
}