Cod sursa(job #1338165)

Utilizator bogdanboboc97Bogdan Boboc bogdanboboc97 Data 9 februarie 2015 20:36:44
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
vector<int> t,h;
void unite(int x,int y)
{
    if(h[x]>h[y])t[y]=x;
    else t[x]=y;
    if(h[x]==h[y])h[y]++;
}
int rad(int x)
{
    int r,y;
    for(r=x;t[r]!=r;r=t[r]);
    while(t[x]!=x)
    {
        y=t[x];
        t[x]=r;
        x=y;
    }
    return r;
}
int main()
{
    int n,m,x,y,op;
    in>>n>>m;
    t=h=vector<int>(n+1);
    for(int i=1;i<=n;i++)t[i]=i;
    for(;m;m--)
    {
        in>>op>>x>>y;
        if(op==1)unite(rad(x),rad(y));
        else out<<(rad(x)==rad(y) ? "DA" : "NU")<<'\n';
    }
    return 0;
}