Cod sursa(job #1384007)

Utilizator DysKodeTurturica Razvan DysKode Data 10 martie 2015 20:02:31
Problema Paduri de multimi disjuncte Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int p = 100001;

int v[1000000],i,j,n,m,x,a,b;
struct cel{int A,B;};

cel findParents(int x)
{
    cel Z;
    Z.A=0;
    while(x != v[ x ])
    {
        x = v[ x ];
        ++Z.A;
    }
    Z.B = x;
    return Z;
}

void addParents(int a, int b)
{
    cel X,Y;
    X = findParents( a );
    Y = findParents( b );
    if(X.A < Y.A)
        v[ a ] = Y.B;
    else
        v[ b ] = X.B;

}

void answer(int a, int b)
{
    cel X,Y;
    X = findParents( a );
    Y = findParents( b );
    if( X.B == Y.B )
        fout<<"DA\n";
    else
        fout<<"NU\n";
}

int main()
{

    fin>>n>>m;
    for(i=1 ; i<=n ; ++i)
        v[ i ] = i;
    for(i=1 ; i<=m ; ++i)
    {
        fin>>x>>a>>b;
        if( x == 1 )
            addParents( a , b );
        else
            answer( a , b );
    }


return 0;
}