Cod sursa(job #1705258)

Utilizator AcuasPopescu Nicolae-Aurelian Acuas Data 20 mai 2016 10:41:13
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>
#define NMAX 100005
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int L[NMAX],RG[NMAX],n,m;
int grupa(int x){
    int R,y;
    for(R=x;L[R]!=R;R=L[R]);
    while(L[x]!=x){
        y=L[x];
        L[x]=R;
        x=y;
    }
    return R;
}
void reuniune(int x,int y){
    if(RG[x]>RG[y])
        L[y]=x;
    else
        L[x]=y;
    if(RG[x]==RG[y])
        ++RG[y];
}
int main(){
    f>>n>>m;
    int x,y,z,i;
    for(i=1;i<=n;++i)
        L[i]=i,RG[i]=1;
    for(i=1;i<=m;++i){
        f>>x>>y>>z;
        if(x==1){
            reuniune(y,z);
        }
        else
            if(grupa(y)==grupa(z))
                g<<"DA\n";
            else
                g<<"NU\n";
    }
    return 0;
}