Cod sursa(job #1333501)

Utilizator AeroHHorea Stefan AeroH Data 3 februarie 2015 11:29:41
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

int i,j,rasp,N,M,c,x,y;
int v[100001];
int h[100001];

int find(int x)
    {
        if (v[x]==v[v[x]])
            return v[x];
        else
            {
                v[x]=find(v[v[x]]);
                return v[x];
            }
    }

void unite(int x,int y)
    {
        int px,py;
        px=find(x);
        py=find(y);

        if (h[x]>h[y])
            v[py]=px;
        else v[px]=py;

        if (h[px] == h[py])
            h[py]++;
    }

int main()
{
   f>>N>>M;

   for (i=1;i<=N;++i)
        v[i]=i,h[i]=1;

   while (M--)
        {
            f>>c>>x>>y;
            if (c == 2)
                {
                    if (find(x) == find(y))
                        g<<"DA\n";
                    else g<<"NU\n";
                }
            else
                {
                    unite(x,y);
                }
        }

    return 0;
}