Pagini recente » Cod sursa (job #830788) | Cod sursa (job #549227) | Cod sursa (job #1928104) | Cod sursa (job #215282) | Cod sursa (job #2750919)
#include <fstream>
using namespace std;
const int NMAX = 100000;
int t[NMAX + 5], h[NMAX + 5];
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int FindSet(int x){
while(t[x] != x)
x = t[x];
return x;
}
void UnionSet(int x, int y){
if(h[x] > h[y])
t[y] = x;
else{
if(h[y] > h[x])
t[x] = y;
else{
t[y] = x;
h[x]++;
}
}
}
int main()
{
int n, m, op, x, y, rx, ry, i;
fin >> n >> m;
for(i = 1; i <= n; i++){
t[i] = i;
h[i] = 1;
}
for(i = 1; i <= m; i++){
fin >> op >> x >> y;
rx = FindSet(x);
ry = FindSet(y);
if(op == 1){
if(rx != ry)
UnionSet(rx, ry);
}
else if(op == 2){
if(rx == ry)
fout << "DA" << "\n";
else
fout << "NU" << "\n";
}
}
return 0;
}