Cod sursa(job #1332674)

Utilizator RonaldoPop Sebastian Paul Ronaldo Data 2 februarie 2015 12:03:02
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");
int p[100005],h[100005],n,m;
int root (int x) {
    if(p[x] < 0) return x;

    p[x] = root(p[x]);
    return p[x];
}

int unire(int rx, int ry)
    {

        if (h[rx]>h[ry])
        {
            p[ry]=rx;
            h[rx]+=h[ry];
        }
    else
        {
            p[rx]=ry;
            h[ry]+=h[rx];
        }
    }
int main()
{
  int op,x,y;

  f>>n>>m;
    for(int i=1; i<=n; i++) p[i]=-1;
    for (int i=0; i<m; i++) {
        f>>op>>x>>y;

        int rootX = root(x);
        int rootY = root(y);
        if (op==2) {
            if (rootX==rootY) g<<"DA\n";
            else g<<"NU\n";
           }
         else {
                if (rootX!=rootY)
                    unire(rootX, rootY);
              }
        return 0;
    }
}