Cod sursa(job #1333248)

Utilizator Eugen_VlasieFMI Vlasie Eugen Eugen_Vlasie Data 2 februarie 2015 22:31:41
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<fstream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n,tata[100010],i,adnc[100010],m,c,a,b;
int grupa(int x)
{
    int y,cx=x;
    while(x!=tata[x])
        x=tata[x];
    while(x!=tata[cx])
    {
        y=tata[cx];
        tata[cx]=x;
        cx=y;
    }
    return x;
}
void unire(int x,int y)
{
    if(adnc[x]>adnc[y])
        tata[y]=x;
    else
        tata[x]=y;
    if(adnc[x]==adnc[y])
        adnc[y]++;

}
int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        tata[i]=i;
    }
    for(i=1;i<=m;i++)
    {
        f>>c>>a>>b;
        if(c==1)
        {
            unire(grupa(a),grupa(b));
        }
        else
        {
            if(grupa(a)==grupa(b))
                g<<"DA"<<'\n';
            else
                g<<"NU"<<'\n';
        }
    }
    return 0;
}