Cod sursa(job #1319697)

Utilizator AndreiITCuriman Andrei AndreiIT Data 17 ianuarie 2015 12:45:28
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int tt[100014], rg[100014], n, m;
int stramos(int nod)
{
    int r=nod;
    for(;tt[r]!=r;r=tt[r]);
    while(tt[nod]!=nod)
    {
        int aux=tt[nod];
        tt[nod]=r;
        nod=aux;
    }
    return r;
}
void unire(int a, int b)
{
    a=stramos(a);
    b=stramos(b);
    if(a==b)
        return ;
    if(rg[a]<rg[b])
        swap(a, b);
    rg[a]+=rg[b];
    tt[b]=a;
}
int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        rg[i]=1;
        tt[i]=i;
    }
    for(int i=1;i<=m;i++)
    {
        int tip, a, b;
        fin>>tip>>a>>b;
        if(tip==1)
            unire(a,b);
        else
        {
            if(stramos(a)!=stramos(b))
                fout<<"NU\n";
            else
                fout<<"DA\n";
        }
    }
    return 0;
}