Cod sursa(job #1344442)

Utilizator andreeadeacAndreea Ioana Deac andreeadeac Data 16 februarie 2015 18:54:40
Problema Paduri de multimi disjuncte Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
using namespace std;

ifstream in("disjoint.in");
ofstream out("disjoint.out");
int n,m,t[100001],size[100001];

int radacina(int x){
    while(t[x]!=x){
        x=t[x];
    }
    return x;
}

void unire(int x, int y){
    int radx,rady;
    radx=radacina(x);
    rady=radacina(y);
    if(radx==rady)
        return;
    if(size[radx]>size[rady]){
        size[radx]+=size[rady];
        t[y]=radx;
    }
    else{

        size[rady]+=size[radx];
        t[x]=rady;
    }
}

bool connected(int x, int y){
    return radacina(x)==radacina(y);
}

int main()
{
    in>>n>>m;
    int i,x,y,tip;
    for(i=1;i<=n;i++){
        t[i]=i;
        size[i]=1;
    }
    for(i=1;i<=m;i++){
        in>>tip>>x>>y;
        if(tip==1){
            unire(x,y);
        }
        else{
            bool rez=connected(x,y);
            if(rez==true)
                out<<"DA\n";
            else
                out<<"NU\n";
        }
    }
    return 0;
}