Pagini recente » Istoria paginii utilizator/test1237 | Diferente pentru echipa-infoarena intre reviziile 6 si 5 | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #2369968)
#include <iostream>
#include<stdio.h>
int sef[100001];
int sefsuprem(int i) {
if(sef[i]==i)
return i;
else
return sef[i]=sefsuprem(sef[i]);
}
void unire(int x, int y) {
int sefx, sefy;
sefx=sefsuprem(x);
sefy=sefsuprem(y);
sef[sefx]=sefy;
}
using namespace std;
int main() {
FILE *fin, *fout;
int n, m, in, xx, yy, w, j;
fin=fopen("disjoint.in","r");
fout=fopen("disjoint.out", "w");
fscanf(fin, "%d %d", &n, &m);
for(w=1;w<=n;w++) {
sef[w]=w;
}
for(w=1;w<=m;w++) {
fscanf( fin, "%d %d %d", &in, &xx, &yy);
if(in==1) {
unire(xx, yy);
}
else {
if(sefsuprem(xx)==sefsuprem(yy)) {
fprintf( fout, "DA\n");
}
else {
fprintf( fout, "NU\n");
}
}
}
fclose( fin );
fclose( fout );
return 0;
}