Cod sursa(job #981449)

Utilizator classiusCobuz Andrei classius Data 7 august 2013 10:01:16
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>

using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

int v[100001],rn[100001];

int find(int x)
{
    while(v[x]!=x)
        x=v[x];
    return x;
}

void unite(int x,int y)
{
    if(rn[x]>rn[y])
        v[y]=x;
    else
        v[x]=y;

    if(rn[x]==rn[y])
        rn[y]++;

    return;
}

int main()
{
    int n,m;

    f>>n>>m;
    for(int i=1;i<=n;i++){
        v[i]=i;
        rn[i]=1;
    }

    for(int i=1;i<=m;i++){
        int cd,x,y;
        f>>cd;
        f>>x>>y;
        if(cd==2){
            if(find(x)==find(y))
                g<<"DA\n";
            else
                g<<"NU\n";
        }else{
            if(find(x)!=find(y))
                unite(find(x),find(y));
        }
    }

    return 0;
}