Pagini recente » Cod sursa (job #1530479) | Cod sursa (job #2490395) | Cod sursa (job #514357) | Cod sursa (job #494142) | Cod sursa (job #2818774)
#include <fstream>
#define N 100001
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int f[N], sz[N];
int find(int x){
int root = x;
while(root != f[root]) root = f[root];
while(x != f[x]){
int aux = f[x];
f[x] = root;
x = aux;
}
return root;
}
void unite(int x, int y){
int gr1 = find(x),
gr2 = find(y);
if(sz[gr1] < sz[gr2]){
sz[gr2] += sz[gr1];
f[gr1] = gr2;
}
else{
sz[gr1] += sz[gr2];
f[gr2] = gr1;
}
}
int main(){
int n, m;
cin >> n >> m; //nr de multimi, nr de operatii
for(int i=1; i<=n; i++)
{
f[i] = i;
sz[i] = 1;
}
for(int i=1; i<=m; i++)
{
int op, x, y;
cin >> op >> x >> y;
if(op == 1){
unite(find(x), find(y));
}
else{
if(find(x) == find(y)) cout << "DA\n";
else cout << "NU\n";
}
}
}