Cod sursa(job #1436914)

Utilizator onica.alexandraOnica Ioana-Alexandra onica.alexandra Data 16 mai 2015 16:28:44
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include<fstream>
using namespace std;
int v[100001],rang[100001],n,m;

void uneste(int x,int y)
{
    if(rang[x]>rang[y])
        v[y]=x;
    else
         v[x]=y;
     if(rang[x]==rang[y])
     rang[y]++;
}

int cauta(int x)
{
    int c,y;
    for(c=x; v[c]!=c; c=v[c]);

    for(; v[x]!=x;)
    {
        y=v[x];
        v[x]=c;
        x=y;
    }
    return c;
}
int main()
{
    int i,x,y,cod;
    ifstream f("disjoint.in");
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        v[i]=i;
        rang[i]=1;
    }
    ofstream g("disjoint.out");
    for(i=1;i<=m;i++)
    {
        f>>cod>>x>>y;
        if(cod==1)
            uneste(x,y);
        else
            if(cauta(x)==cauta(y))
            g<<"DA"<<"\n";
            else
            g<<"NU"<<"\n";
    }
    f.close();
    g.close();
    return 0;
}