Pagini recente » Cod sursa (job #642276) | Cod sursa (job #3245092) | Cod sursa (job #1786884) | Cod sursa (job #2885814) | Cod sursa (job #1517062)
#include <bits/stdc++.h>
#define NMax 100005
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n;
int FA[NMax];
int GR[NMax];
int fatherOf(int x) {
int el, aux;
for (el=x; el!=FA[el]; el=FA[el]);
for (;x != FA[x];) {
aux = FA[x];
FA[x] = el;
x = aux;
}
return el;
}
void join(int x, int y) {
int rx = fatherOf(x);
int ry = fatherOf(y);
if (GR[rx] > GR[ry]) {
FA[ry] = rx;
} else if (GR[rx] < GR[ry]) {
FA[rx] = ry;
} else {
FA[rx] = ry;
GR[ry]++;
}
}
void init() {
for (int i=1;i<=n;i++) {
FA[i] = i;
GR[i] = 1;
}
}
void read() {
int m;
f>>n>>m;
init();
for (int i=1;i<=m;i++) {
int tip, x, y;
f>>tip>>x>>y;
if (tip == 1) {
join(x,y);
} else if (tip == 2) {
if (fatherOf(x) == fatherOf(y)) {
g<<"DA\n";
} else {
g<<"NU\n";
}
}
}
}
int main() {
read();
f.close(); g.close();
return 0;
}