Pagini recente » Cod sursa (job #878205) | Cod sursa (job #1698160) | Cod sursa (job #1615583) | Cod sursa (job #2602528) | Cod sursa (job #2561161)
#include <cstdio>
using namespace std;
int n, m, v[100005], r[100005], i, q, x, y, j, t1, t2, t;
void print(int v[]) {
for(int i = 1; i <= n; ++i)
printf("%d ", v[i]);
printf("\n");
}
int find(int x) {
int rad,y;
for(rad=x ; v[rad]!=rad; rad=v[rad]);
while(x != v[x])
{
y=v[x];
v[x]=rad;
x=y;
}
return rad;
}
void unite(int x, int y) {
if(r[x]>r[y])
v[y]=x;
else
v[x]=y;
if(r[x]==r[y])
r[y]++;
}
int main() {
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%d%d", &n, &m);
for(i = 1; i <= n; ++i)
v[i] = i;
for(i = 1; i <= m; ++i) {
scanf("%d%d%d", &q, &x, &y);
if(q == 1) {
unite(find(x),find(y));
//print(v);
//print(r);
}
else
if(find(x) == find(y))
printf("DA\n");
else
printf("NU\n");
}
}