Cod sursa(job #1216480)

Utilizator SapientiaCHIRILA ADRIAN Sapientia Data 4 august 2014 17:35:45
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
#define Nmax 100009
using namespace std;
int ar[Nmax],nivel[Nmax];
int search(int nod)
{
    while(ar[nod]!=nod) nod=ar[nod];
    return(nod);
}
void reading_solve()
{
    int m,i,node1,node2,op,rad1,rad2,n;
    ifstream f("disjoint.in");
    ofstream g("disjoint.out");
    f>>n>>m;

    for(i=1;i<=n;++i)
    {
        ar[i]=i;
        nivel[i]=1;
    }

    for(i=1;i<=m;++i)
    {
       f>>op>>node1>>node2;
       if (op==1)
       {
           rad1=search(node1);
           rad2=search(node2);
           if (nivel[rad1]>nivel[rad2]) ar[rad2]=rad1;
           else if (nivel[rad1]<nivel[rad2]) ar[rad1]=rad2;
           else
           {
               ar[rad2]=rad1;
               ++nivel[rad1];
           }
       }
       else
       {
           if (search(node1)==search(node2)) g<<"DA\n";
           else g<<"NU\n";
       }
    }
    f.close();
    g.close();
}
int main()
{
    reading_solve();
    return 0;
}