Pagini recente » Atasamentele paginii Profil Adrian | Diferente pentru utilizator/adrian intre reviziile 3 si 2 | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #3363421)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n , m , parent[100001] , size[100001];
inline int find(int x){
if(parent[x] != x) parent[x] = find(parent[x]);
return parent[x];
}
inline void uniune(int a , int b){
a = find(a);
b = find(b);
if(a != b){
if(size[a] < size[b]) swap(a , b);
parent[b] = a;
size[a] += size[b];
}
}
int main(){
fin >> n >> m;
for(int i = 1 ; i <= n ; i++) parent[i] = i , size[i] = 1;
for(int i = 1 ; i <= m ; i++){
int tip , x , y;
fin >> tip >> x >> y;
if(tip == 1) uniune(x , y);
else{
if(find(x) == find(y)) fout << "DA\n";
else fout << "NU\n";
}
}
}