Pagini recente » Cod sursa (job #903072) | Cod sursa (job #2041892) | Cod sursa (job #83352) | Cod sursa (job #863890) | Cod sursa (job #2946769)
#include <bits/stdc++.h>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, m, parent[100005], c, x, y, rnk[100005];
int getParent(int n){
if(n != parent[n])
return getParent(parent[n]);
else
return n;
}
void unite(int p, int x){
while(x != parent[x]) {
int temp = parent[x];
parent[x] = p;
x = temp;
}
parent[x] = p;
}
int main() {
f >> n >> m;
for(int i = 1; i <= n; i ++){
parent[i] = i;
rnk[i] = 1;
}
for (int i = 1; i <= m; i ++){
f >> c >> x >> y;
int p1 = getParent(x);
int p2 = getParent(y);
if (c == 1){
if(rnk[p1] < rnk[p2]){
unite(p2, x);
rnk[p2] += rnk[p1];
}
else {
unite(p1, y);
rnk[p1] += rnk[p2];
}
}
else{
if(getParent(x) == getParent(y)) g << "DA\n";
else g << "NU\n";
}
}
return 0;
}