Cod sursa(job #1635482)

Utilizator Vlad_lsc2008Lungu Vlad Vlad_lsc2008 Data 6 martie 2016 18:07:29
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <cstdio>
using namespace std;
int n,m1,m[100008];

inline int rad(int nod)
{
    int rad,strt=nod,aux;
    while(m[nod]!=nod) nod=m[nod]; rad=nod;
    while(m[strt]!=strt) { strt=m[strt]; m[strt]=rad; }
    return rad;
}

inline void unite(int v1,int v2)
{
    m[v2]=m[v1];
}

int main()
{
    int i,op,v1,v2;
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf("%d%d",&n,&m1);
    for(i=1;i<=n;i++) m[i]=i;
    for(;m1;m1--)
    {
        scanf("%d%d%d",&op,&v1,&v2);
        if(op==2)
        {
            if(rad(v1)==rad(v2)) printf("DA\n");
                            else printf("NU\n");
        } else unite(v1,v2);
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}