Cod sursa(job #662162)

Utilizator Laura_MMiclescu Laura Laura_M Data 15 ianuarie 2012 23:30:02
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>

using namespace std;

int t[100001], v[100001], i, X, Y;

int Find(int k)
{
    if (k!=t[k])
        t[k]=Find(t[k]);
    return t[k];              
}

void Union(int i, int j)
{
     if (v[i]>v[j])
        {t[j]=i;
         v[j]+=v[i];}
     else
        {t[i]=j;
         v[i]+=v[j];}       
}     
     

int main()
{
    int N, M, cod, rx, ry;
    ifstream f("disjoint.in");
    ofstream g("disjoint.out");
    f>>N>>M;
    for (i=1; i<=N; i++)
         {t[i]=i;
          v[i]=1;}
    for (i=1; i<=M; i++)
        {f>>cod>>X>>Y;
         if (cod==1)
            {rx=Find(X);
             ry=Find(Y);
             Union(X,Y);}
         else
             if (Find(X)==Find(Y))
                 g<<"DA";
             else
                 g<<"NU";}
    f.close();
    g.close();             
    return 0;
}