Pagini recente » Cod sursa (job #2495680) | Cod sursa (job #3252740) | Cod sursa (job #2641444) | Cod sursa (job #598545) | Cod sursa (job #261925)
Cod sursa(job #261925)
#include <cstdio>
const int NMAX = 100000;
int n,m;
int T[NMAX], SUB[NMAX];
int trace ( int x ) {
int root;
for (root = x; T[root] != root; root = T[root]);
for (int a = x, b; a != root; b = T[a], T[a] = root, a = b);
return root;
}
void unite ( int a, int b ) {
int ta = trace(a);
int tb = trace(b);
if (SUB[ta] < SUB[tb]) ta ^= tb ^= ta ^= tb;
T[tb] = ta;
if (SUB[ta] == SUB[tb]) ++SUB[ta];
}
int main() {
freopen("disjoint.in","rt",stdin);
freopen("disjoint.out","wt",stdout);
scanf("%d %d",&n,&m);
for (int i = 0; i < n; ++i) {
T[i] = i;
SUB[i] = 1;
}
for (int i = 0, cod,a,b; i < m; ++i) {
scanf("%d %d %d",&cod,&a,&b);
--a; --b;
if (cod == 1)
unite(a,b); else
printf("%s\n",trace(a) == trace(b) ? "DA" : "NU");
}
}