Pagini recente » Cod sursa (job #414465) | Cod sursa (job #916837) | Cod sursa (job #2289350) | Cod sursa (job #1716894) | Cod sursa (job #1018522)
#include <iostream>
#include <fstream>
#define nmax 100005
using namespace std;
int v[nmax];
int n, m, op, a, b, x, y;
int find(int x) {
if(v[x] < 0) return x; //x ii radacina
v[x] = find(v[x]);
return v[x];
}
void join(int root1, int root2) {
if(v[root1] < v[root2]) { //arborele 1 ii mai mare
v[root1] += v[root2];
v[root2] = root1;
}
else {
v[root2] += v[root1];
v[root1] = root2;
}
}
int main() {
ifstream f("disjoint.in");
ofstream g("disjoint.out");
f>>n>>m;
for(int i=1; i<=n; i++) v[i] = -1;
for(int i=1; i<=m; i++) {
f>>op>>a>>b;
x = find(a);
y = find(b);
if(op == 2) {
if(x==y) g<<"DA\n";
else g<<"NU\n";
}
else join(x, y);
}
return 0;
}