Pagini recente » Cod sursa (job #2305972) | Cod sursa (job #882445) | Cod sursa (job #1542003) | Cod sursa (job #2260978) | Cod sursa (job #485574)
Cod sursa(job #485574)
#include<fstream>
#define maxn 100005
using namespace std;
int t[maxn], rg[maxn], n;
void makeset(){
for (int i = 1; i <= n; i++){
t[i] = i;
rg[i] = 0;
}
}
int find(int x){
if (x == t[x])
return x;
else {
t[x] = find(t[x]);
return t[x];
}
}
void unionn(int x, int y){
x = find(x);
y = find(y);
if (rg[x] > rg[y])
t[y] = x;
else
if (rg[y] > rg[x])
t[x] = y;
else
if (x != y){
t[y] = x;
rg[x]++;
}
}
int main(){
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int m, i, j, c, x, y;
f>>n>>m;
makeset();
for (i = 1; i <= m; i++){
f>>c>>x>>y;
if (c == 1)
unionn(x, y);
else {
x = find(x);
y = find(y);
if (x == y)
g<<"DA"<<'\n';
else
g<<"NU"<<'\n';
}
}
return 0;
}