Cod sursa(job #1382388)

Utilizator mariusadamMarius Adam mariusadam Data 8 martie 2015 22:21:43
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#define n_max 100001
 using namespace std;

 ifstream r("disjoint.in");
 ofstream w("disjoint.out");

 long tata[n_max],rg[n_max];
 long n,m;

 long radacina(long nod) {
    if (tata[nod]==0)
            return nod;
    else {
        tata[nod]=radacina(tata[nod]);
        return tata[nod];
    }
 }

 int main() {
    long i,task,x,y,a,b;
    r>>n>>m;
    for (i=1; i<=n; i++)
        rg[i]=1;
    for (i=1; i<=m; i++) {
       r>>task>>x>>y;
       a=radacina(x);
       b=radacina(y);
       if (task==1) {
            if (rg[a]>rg[b])
                tata[b]=a;
            else
                tata[a]=b;
            if (rg[a]==rg[b])
                rg[b]++;
       }
       else
            if (a!=b)
                w<<"NU"<<"\n";
            else
                w<<"DA"<<"\n";
    }
    r.close();
    w.close();
    return 0;
 }