Cod sursa(job #2075150)

Utilizator KemyKoTeo Virghi KemyKo Data 25 noiembrie 2017 11:32:43
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>
#define NMAX 100001

using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

int n, m, t[NMAX], h[NMAX];

int _find(int x)
{
    int r=x, y=x, taux;
    while(t[r]!=0)r=t[r];
    while(y!=r){
        taux=t[y];
        t[y]=r;
        y=taux;
    }
    return r;
}

void _union(int x,int y)
{
    int c;
    if(h[x]<h[y]){
        t[x]=y;
        c=y;
    }
    else{
        t[y]=x;
        c=x;
    }
    if(h[x]==h[y])h[c]++;
}

int main()
{
    int i,cod,x,y;

    f>>n>>m;
    for (i=1;i<=m;i++){
        f>>cod>>x>>y;
        switch(cod){
            case 2:{
                if(_find(x)==_find(y))g<<"DA";
                else g<<"NU";
                g<<'\n';
                break;
            }
            case 1:{
                _union(x, y);
                break;
            }
        }
    }

    return 0;
}