Cod sursa(job #1443696)

Utilizator cristina_borzaCristina Borza cristina_borza Data 28 mai 2015 14:56:53
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <vector>

using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n , m;
vector <int> p,a;
int query(int x)
{
    int cx=x;
    while(p[x]!=x)
    {
        x=p[x];
    }
    while(cx!=x)
    {
        int aux=p[cx];
        p[cx]=x;
        cx=aux;
    }
    return x;
}
void update(int x,int y)
{
    int rx=query(x),ry=query(y);
    if(a[rx]<a[ry])
    {
        p[rx]=ry;
    }
    else
    {
        p[ry]=rx;
    }
}
int main()
{
    int i , op ,x,y;
    f>>n>>m;
    p.resize(n+1);
    a.resize(n+1,1);
    for(i=1;i<=n;i++)
    {
        p[i]=i;
    }
    for(i=1;i<=m;i++)
    {
        f>>op>>x>>y;
        if(op==1)
        {
            update(x,y);
        }
        else
        {
            if(query(x)==query(y))
            {
                g<<"DA\n";
            }
            else
            {
                g<<"NU\n";
            }
        }
    }
    return 0;
}