Cod sursa(job #2198167)

Utilizator PredaBossPreda Andrei PredaBoss Data 23 aprilie 2018 19:51:49
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;
int parent[100005],val[100005];
int n,m,a,b,c;
int search_for_parent(int pos)
{
    if(parent[pos]==0)
        return pos;
    return search_for_parent(parent[pos]);
}
int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf("%d %d\n",&n,&m);
    for(int i=1;i<=n;i++)
        val[i]=1;
    for(int i=1;i<=m;i++)
    {
        scanf("%d %d %d\n",&c,&a,&b);
        if(c==1)
        {
            int papa1=search_for_parent(a);
            int papa2=search_for_parent(b);
            if(papa1==papa2)
                continue;
            if(val[papa1]>=val[papa2])
            {
                val[papa1]+=val[papa2];
                parent[papa2]=papa1;
            }
            else
            {
                val[papa2]+=val[papa1];
                parent[papa1]=papa2;
            }
            continue;
        }
            int papa1=search_for_parent(a);
            int papa2=search_for_parent(b);
            if(papa1==papa2)
                printf("DA\n");
            else
                printf("NU\n");
    }
    return 0;
}