Cod sursa(job #2154264)

Utilizator IustinPetrariuIustinian Petrariu IustinPetrariu Data 6 martie 2018 20:25:13
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>
#define nmax 100001

using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int t[nmax],h[nmax],n,m,tip,x,y;
int findset(int node)
{
    while(t[node]!=node)
        node=t[node];
    return node;
}
void Union(int x, int y)
{
    if(h[y]==h[x])
    {
        h[x]++;
        t[y]=x;
    }
    if(h[x]>h[y])
    {
        t[y]=x;
    }
    if(h[x]<h[y])
        t[x]=y;
}
int main()
{
    fin>>n>>m;
    for(int i =1 ; i <= n ; i++)
    {
        t[i]=i;
        h[i]=i;
    }
    for(int i =1; i <=m ; i++)
    {
        fin>>tip>>x>>y;
        if(tip==1)
            Union(findset(x),findset(y));
        else
        {
            if(findset(x)==findset(y))
                 fout<<"DA"<<'\n';
            else fout<<"NU"<<'\n';
        }
    }
    return 0;
}