Pagini recente » Cod sursa (job #3262488) | Cod sursa (job #2935403)
#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] < 0)
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(uf[T1] > uf[T2])
swap(T1,T2);
uf[T1] += uf[T2];
uf[T2] = T1;
}
};
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 > 0)
out << "DA\n";
else
out << "NU\n";
}
}
return 0;
}