Cod sursa(job #1438318)

Utilizator mmc170597Marin Mihnea Cristian mmc170597 Data 19 mai 2015 17:13:08
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int T[100001],h[100001],n;
int find(int nod){
    if(T[nod])
        return find(T[nod]);
    else
        return nod;
}
void Union(int x,int y){
    int rx=find(x),ry=find(y),hx=h[rx],hy=h[ry];
    if(hx==hy){
        T[ry]=rx;
        h[rx]++;
    }
    else
        if(hx>hy)
            T[ry]=rx;
        else
            T[rx]=ry;
}
int main()
{
    int m,t,x,y;
    in>>n>>m;
    while(m--){
        in>>t>>x>>y;
        if(t==1)
            Union(x,y);
        else{
            int rx=find(x),ry=find(y);
            if(rx==ry)
                out<<"DA"<<"\n";
            else
                out<<"NU"<<"\n";
        }
    }
    return 0;
}