Cod sursa(job #229137)

Utilizator MciprianMMciprianM MciprianM Data 9 decembrie 2008 14:00:32
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<fstream>
using namespace std;
int n, m;
int t[100009], gr[100009];
int rad(int x)
{
        int r=x,y;
        while(t[r]!=r)  r=t[r];
        y=x;
        while(t[y]!=r)
        {
                y=t[x];
                t[x]=r;
                x=y;
        }
        return r;
}
void unire(int x, int y)
{
        int r1,r2;
        r1=rad(x);
        r2=rad(y);
        if(gr[r1]<gr[r2])
                t[r2]=r1;
        else    t[r1]=r2;
        if(gr[r1]==gr[r2])        gr[r1]++;
}
int main()
{
        int i,cod,x,y;
        ifstream f("disjoint.in");
        ofstream g("disjoint.out");
        f>>n>>m;
        for(i=1;i<=n;i++)
        {
          gr[i]=1;
          t[i]=i;
        }
        for(i=0;i<m;i++)
        {
                f>>cod>>x>>y;
                if(cod==1)
                        unire(x,y);
                else  if(rad(x)==rad(y))  g<<"DA\n";
                        else g<<"NU\n";
        }
        f.close();
        g.close();
        return 0;
}