Pagini recente » Cod sursa (job #2958470) | Cod sursa (job #642251) | Cod sursa (job #1804060) | Cod sursa (job #2622713) | Cod sursa (job #2946632)
#include <bits/stdc++.h>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int father[100001], w[100001];
int get_set(int elem){
if(father[elem] != elem)
father[elem] = get_set(father[elem]);
return father[elem];
}
void union_set(int x, int y){
int left_set = get_set(x);
int right_set = get_set(y);
if(left_set != right_set){
if(w[left_set] > w[right_set]){
father[right_set] = left_set;
w[left_set] += w[right_set];
}
else{
father[left_set] = right_set;
w[right_set] += w[left_set];
}
}
}
int main(){
int n, m;
f >> n >> m;
for(int i = 1; i <= n; ++i)
father[i] = i, w[i] = 1;
for(int i = 1; i <= m; ++i){
int c, x, y;
f >> c >> x >> y;
if(c == 1){
union_set(x, y);
}
else{
if(get_set(x) == get_set(y))
g << "DA\n";
else
g << "NU\n";
}
}
f.close();
g.close();
return 0;
}