Cod sursa(job #1038639)

Utilizator vladcfVlad Frasineanu vladcf Data 21 noiembrie 2013 20:49:46
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>

using namespace std;
int n,m,i,a,b,c,v[100002],h[100002];

void pas1 (int x,int y)
{
    if (h[x]>h[y])
        {
            v[y]=v[x];
        }
        else
        {
            v[x]=v[y];
        }
    if (h[x]==h[y]) h[y]++;
}

int pas2 (int x)
{
    int r,y,t;
    r=x;
    while (v[r]) r=v[r];
    y=x;
    while (y!=r)
        {
            t=v[y];
            v[y]=r;
            y=t;
        }
    return r;
}

int main()
{
    ifstream f("disjoint.in");
    ofstream g("disjoint.out");
    f>>n>>m;
    for (i=1;i<=n;i++)
        {
            v[i]=0;
            h[i]=1;
        }
    for (i=0;i<m;i++)
        {
            f>>a>>b>>c;
            if (a==1)
                {
                    if (pas2(b)!=pas2(c)) pas1(pas2(b),pas2(c));
                }
            if (a==2)
                {
                    if (pas2(b)==pas2(c))
                        {
                            g<<"DA";
                            g<<"\n";
                        }
                        else
                        {
                            g<<"NU";
                            g<<"\n";
                        }
                }
        }
    f.close();
    g.close();
    return 0;
}