Cod sursa(job #2273735)

Utilizator marian013Giugioiu Marian Constantin marian013 Data 31 octombrie 2018 21:18:07
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include<stdio.h>
using namespace std;
int t[100002],r[100002];
int cauta(int x){
    int i;
    for(i = x; t[i] != i; i = t[i]);
    int j = x;
    int k;
    while(t[j] != j)
    {
        k = t[j];
        t[j] = i;
        j = k;
    }
    return i;
}
void uneste(int x, int y){
    if(r[x] >= r[y])
        t[y] = x;
    else
        t[x] = y;
    if(r[x] == r[y])
        r[x]++;
}
int main()
{
    freopen("disjoint.in", "r", stdin);
	freopen("disjoint.out", "w", stdout);
	int n,x,m,y,i,p;
	scanf("%d %d ", &n, &m);
	for(i = 1; i <= n; i++)
    {
        t[i]=i;
        r[i]=1;
    }
    for(i = 1; i <= m; i++)
    {
        scanf("%d %d %d", &p, &x, &y);
        if( p== 2)
        {
            if(cauta(x) == cauta(y))
                printf("DA\n");
            else
                printf("NU\n");
        }
        else
            uneste(cauta(x), cauta(y));
    }
}