Pagini recente » Cod sursa (job #2749361) | Cod sursa (job #3209606) | Cod sursa (job #819182)
Cod sursa(job #819182)
#include <fstream>
#define NMAX 100011
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int N, M;
int R[NMAX], T[NMAX];
int search(int val) {
int nod, aux;
for(nod = val; nod != T[nod]; nod = T[nod]);
for(; val != T[val]; ) {
aux = T[val];
T[val] = nod;
val = aux;
}
return nod;
}
void unite(int a, int b) {
if(R[a] < R[b])
T[a] = b;
else
T[b] = a;
if(R[a] == R[b]) ++ R[b];
}
void read() {
int i, cod, a, b;
fin >> N >> M;
for(i = 1; i <= N; ++ i) {
R[i] = 0;
T[i] = i;
}
for(i = 1; i <= M; ++ i) {
fin >> cod >> a >> b;
if(cod == 2) {
if(search(a) == search(b))
fout << "DA\n";
else fout << "NU\n";
}
else if(search(a) != search(b))
unite(a, b);
}
}
void show() {
int i;
for(i = 1; i <= N; ++ i)
fout << R[i] << ' ';
fout << '\n';
for(i = 1; i <= N; ++ i)
fout << T[i] << ' ';
fout << '\n';
}
int main() {
read();
return 0;
}