Cod sursa(job #1332655)

Utilizator RonaldoPop Sebastian Paul Ronaldo Data 2 februarie 2015 11:41:54
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 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]!=x)    p[x]=root(p[x]);
            return p[x];
    }
int unire(int x, int y)
    {
        int rx=root(x);
        int ry=root(y);
        if (h[rx]>h[ry])
        {
            p[ry]=rx;
            h[rx]+=h[ry];
        }
        else
        {
            p[rx]=ry;
            h[ry]+=h[rx];
        }
    }
int main()
{
int cod,x,y;
  f>>n>>m;
    for(int i=0; i<=100000; i++)
    {   p[i]=i;
        h[i]=1;
    }
    for (int i=0; i<m; i++)
    {  f>>cod>>x>>y;
        if (cod==2)
           { if (root(x)==root(y)) g<<"DA"<<endl;
                    else g<<"NU"<<endl;
           }
         else {if (root(x)!=root(y))
                    unire(x, y);
              }
        return 0;
    }
}