Pagini recente » Cod sursa (job #2410725) | Cod sursa (job #669417) | Cod sursa (job #2410723) | Cod sursa (job #2419678) | Cod sursa (job #2927278)
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m, c, x, y;
int t[100010], r[100010];
int find(int x){
int r=x, y;
//fout <<x;
while(t[r] != r)
r = t[r];
while(t[x] != x){
y = t[x];
t[x] = r;
x = y;
}
return r;
}
void Union(int x, int y){
if(r[x] > r[y]) t[y] = x;
else t[x] = y;
if(r[x] == r[y]) r[y]++;
}
int main(){
fin >> n >> m;
for(int i=1; i<=n; i++){
t[i] = i; r[i] = i;
}
for(int i=1; i<=m; i++){
fin >> c >> x >> y;
if(c == 1){
if(find(x) == find(y)){
fout << i;
return 0;
}
Union(find(x), find(y));
}
else{
if(find(x) == find(y))
fout << "DA" << '\n';
else
fout << "NU" << '\n';
}
}
return 0;
}