Pagini recente » Cod sursa (job #2088673) | Cod sursa (job #2439104) | Cod sursa (job #2548798) | Cod sursa (job #1025109) | Cod sursa (job #1496914)
#include <bits/stdc++.h>
using namespace std;
int n, m;
int v[100005];
int nxt[100005];
int first[100005];
int last[100005];
int lg[100005];
void mergeList(int a, int b) {
if(v[a] != v[b]) {
if(lg[a] < lg[b]) {
int aux = a;
a = b;
b = aux;
}
if(lg[a] == lg[b])
lg[a] ++;
nxt[last[a]] = first[b];
for(int i = first[b]; i; i = nxt[i]) {
v[i] = v[a];
first[i] = first[a];
lg[b] = lg[a];
}
int ok = last[a];
int i;
for(i = first[a]; i != ok; i = nxt[i])
last[i] = last[b];
last[i] = last[b];
}
}
int main()
{
FILE *f = fopen("disjoint.in", "r");
FILE *g = fopen("disjoint.out", "w");
int x, y, t;
fscanf(f, "%d %d", &n, &m);
int k = 0;
for(int i = 1; i <= n; i ++) {
v[i] = i;
first[i] = i;
last[i] = i;
lg[i] = 1;
}
for(int i = 1; i <= m; i ++) {
fscanf(f, "%d %d %d", &t, &x, &y);
if(t == 1) k++, mergeList(x, y);
else {
if(v[x] == v[y])
fprintf(g, "DA\n");
else fprintf(g, "NU\n");
}
}
return 0;
}