Pagini recente » Cod sursa (job #1095142) | Cod sursa (job #449641) | Cod sursa (job #1782009) | Cod sursa (job #2587593) | Cod sursa (job #754275)
Cod sursa(job #754275)
#include <cstdio>
#define MAX 100020
using namespace std;
int Tata[MAX], Rang[MAX], N, M, i, x, y, c;
int cauta(int x){
if (Tata[x] != x)
x = cauta(Tata[x]);
return Tata[x];
}
void uneste(int x, int y){
if (Rang[x] > Rang[y])
Tata[y] = x;
else Tata[x] = y;
if (Rang[x] == Rang[y]) Rang[y]++;
}
int main()
{
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%d %d ", &N, &M);
for (i = 1; i <= N; i++){
Tata[i] = i; Rang[i] = 1;
}
for (i = 1; i <= M; i++)
{
scanf("%d %d %d", &c, &x, &y);
if (c==1) {
if (cauta(x) == cauta(y)) printf("%d ", i);
else uneste(cauta(x), cauta(y));
}
else {
if (cauta(x) == cauta(y)) printf("DA\n");
else printf("NU\n");
}
}
return 0;
}