Pagini recente » Cod sursa (job #30004) | Cod sursa (job #2137251)
#include<fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
const int MAX = 100005;
int n, m, father[MAX], level[MAX];
inline int find_root(int x){
int i, y;
for(i = x; father[i] != i; i = father[i]);
while(father[x] != x){
y = father[x];
father[x] = i;
x = y;
}
return i;
}
inline void unite(int x, int y){
if(level[x] > level[y])
father[y] = x;
else
father[x] = y;
if(level[x] == level[y])
level[y]++;
}
void solve(){
int cod, x, y;
f >> n >> m;
for(int i = 1; i <= n; i++){
level[i] = 1;
father[i] = i;
}
while(m--){
f >> cod >> x >> y;
if(cod == 2){
if(find_root(x) == find_root(y))
g << "DA" << '\n';
else
g << "NU" << '\n';
}
else{
unite(find_root(x), find_root(y));
}
}
}
int main(){
solve();
}