Cod sursa(job #1731270)

Utilizator Y0da1NUME JMECHER Y0da1 Data 18 iulie 2016 16:48:58
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
///ponderare - O(n log2 n)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
int n, m, s[100002], h[100002];
int find2(int x)
{
    int i = x;
    while (s[i]!=i)
        i=s[i];
    return i;
}
void reuniune3(int a, int b)
{
    if(h[a]==h[b])
    {
        ++h[a];
        s[b]=a;
    }
    else if (h[a]>h[b])
            s[b]=a;
        else
            s[a]=b;
}
int main()
{
    int cod, x, y;
    ifstream g ("disjoint.in");
    ofstream h ("disjoint.out");
    g>>n>>m;
    for(int i=1;i<=n;++i)
        s[i]=i;
    for(int i=1;i<=m;++i)
    {
        g>>cod>>x>>y;
        if(cod==1)
            reuniune3(find2(x), find2(y));
        else
        {
            if(find2(x)==find2(y))
                h<<"DA\n";
            else
                h<<"NU\n";
        }
    }
    g.close();
    h.close();
    return 0;
}