Cod sursa(job #1568805)

Utilizator stefan.botezStefan Botez stefan.botez Data 14 ianuarie 2016 18:40:47
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
#include <vector>

using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int cd,x,y,n,m,TT[100001],R[100001];
int find(int x)
{
    int RD,aux;
    for(RD=x;TT[RD]!=RD;RD=TT[RD]);
    for (;TT[x]!=x;)
    {
        aux=TT[x];
        TT[x]=RD;
        x=aux;
    }
    return RD;
}
int uneste(int x,int y)
{
    if(R[x]>R[y])
        TT[y]=x;
    else TT[x]=y;
    if(R[x]==R[y])
        R[y]++;
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=n;i++)
    {
        TT[i]=i;
        R[i]=1;
    }
    for(int i=1;i<=m;i++)
    {
        f>>cd>>x>>y;
        if(cd==2)
        {
            if(find(x)==find(y))g<<"DA"<<endl;
            else g<<"NU"<<endl;
        }
        else uneste(find(x),find(y));
    }
    return 0;
}