Cod sursa(job #1805945)

Utilizator dianamichesaRosu Diana Michesa dianamichesa Data 14 noiembrie 2016 18:11:56
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n,m,sef[100001],h[100001];
int find(int x)
{
    if(sef[x]==x) return x;
    sef[x]=find(sef[x]);
    return sef[x];
}
void uni(int x, int y)
{
    int i,j;
    i=find(x);
    j=find(y);
    if(h[i]>h[j])
        sef[j]=i;
    else
        if(h[i]<h[j])
           sef[i]=j;
        else{
            sef[i]=j;
            h[j]++;
        }
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=n;i++){
        sef[i]=i;
        h[i]=1;
    }
    int x,n1,n2;
    for(int i=1;i<=m;i++){
        f>>x>>n1>>n2;
        if(x==1) uni(n1,n2);
        if(x==2){
            if(find(n1)==find(n2)) g<<"DA"<<'\n';
            else g<<"NU"<<'\n';
        }
    }
    return 0;
}