Pagini recente » Cod sursa (job #1519046) | Cod sursa (job #2054135) | Cod sursa (job #2483360) | Cod sursa (job #1506728) | Cod sursa (job #677212)
Cod sursa(job #677212)
#include<fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int N, M;
int h[100001]; //height of ith tree
int dad[100001];
int find(int x)
{ int root, tmp;
for(root = x; root != dad[root]; root = dad[root]);
while(x != root)
{ tmp = dad[x];
dad[x] = root;
x = tmp;
}
return root;
}
int unite(int r1, int r2)
{ if(h[r1] < h[r2]) swap(r1, r2);
dad[r2] = r1;
if(h[r1] == h[r2]) h[r1]++;
}
int main()
{ int i, x, y, op;
f>>N>>M;
for(i = 1; i <= N; i++) dad[i] = i, h[i] = 1;
for(i = 1; i <= M; i++)
{ f>>op>>x>>y;
if(op == 1) unite(find(x), find(y));
else if(find(x) == find(y)) g<<"DA \n";
else g<<"NU \n";
}
f.close();
g.close();
return 0;
}