Cod sursa(job #2049841)

Utilizator MoleRatFuia Mihai MoleRat Data 27 octombrie 2017 18:19:31
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int P[100010];
int V[100010];
void makeSet(int x)
{
    P[x]=x;
    V[x]=0;
}
int getPar(int x)
{
    if (x!=P[x])
        P[x]=getPar(P[x]);
    return P[x];
}
void mergeSets(int x,int y)
{
    if (getPar(x)==getPar(y))
        return;
    int p1,p2;
    p1=getPar(x);
    p2=getPar(y);
    P[y]=p1;

    /*if (V[p1]==V[p2])
    {
        V[p1]++;
        P[y]=p1;
    }
    else
    if (V[p1]>V[p2])
        P[y]=p1;
    else
        P[x]=p2;*/
}
int main()
{
    int n,m;
    fin>>n>>m;
    for (int i=1;i<=n;i++)
        makeSet(i);
        int x,y,z;
    for (int i=1;i<=m;i++)
    {
        fin>>x>>y>>z;
        if (x==1)
            mergeSets(y,z);
        else
        {
            if (getPar(y)==getPar(z))
                fout<<"DA\n";
            else
                fout<<"NU\n";
        }
    }
    return 0;
}