Pagini recente » Cod sursa (job #1878802) | Cod sursa (job #726320) | Cod sursa (job #2503742) | Cod sursa (job #760569) | Cod sursa (job #2015037)
#include <bits/stdc++.h>
using namespace std;
FILE *F=fopen("disjoint.in", "r"), *G=fopen("disjoint.out", "w");
int n, m, q, x, y, tx, ty, t[100006], rg[100006];
int fnd(int x)
{
int r, y;
for(r = x; r != t[r]; r = t[r]);
while(x != t[x])
{
y = t[x];
t[x] = r;
x = y;
}
return r;
}
void Unite(int x, int y)
{
if(rg[x] >= rg[y]) t[y] = x;
else t[x] = y;
if(rg[x] == rg[y]) rg[x] ++;
}
int main()
{
fscanf(F, "%d %d ", &n, &m);
for(int i = 1; i <= n; ++ i) t[i] = i, rg[i] = 1;
for(int i = 0; i < m; ++ i)
{
fscanf(F, "%d %d %d ", &q, &x, &y);
tx = fnd(x); ty = fnd(y);
if(q == 2)
{
tx == ty ? fprintf(G, "DA\n") : fprintf(G, "NU\n");
}
else Unite(tx, ty);
}
return 0;
}