Cod sursa(job #1615259)

Utilizator raddudjPogonariu Radu raddudj Data 26 februarie 2016 14:33:49
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <cstdio>

using namespace std;

const int NMAX=100000;

int t[NMAX + 5], h[NMAX + 5];

inline int find(int x) {
    while(t[x]!=x)
        x=t[x];
    return x;
}
inline void unifica(int x,int y) {
    ///x si y sunt radacini de arbori
    if(h[x]>=h[y]) {
        t[y]=x;
        h[x]+=(h[x]==h[y]);
        return;
    }
    t[x]=y;
}
int main() {
    int n,m;
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i=1; i<=n; i++)
        t[i]=i,h[i]=1;
    for(int i=1; i<=m; i++) {
        int c,x,y;
        scanf("%d%d%d",&c,&x,&y);
        if(c==1)
            unifica(find(x),find(y));
        else if(find(x) == find(y))
            printf("DA\n");
        else
            printf("NU\n");
    }
    return 0;
}