Cod sursa(job #1747471)

Utilizator MoleRatFuia Mihai MoleRat Data 24 august 2016 22:41:53
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
using namespace std;
ifstream fi("disjoint.in");
ofstream fo("disjoint.out");
int i;
int P[100001],NR[100001];
int N,M,op;
int tip,a,b;
int rada, radb;

int p(int v)
{
    if (v==P[v])
        return v;
    else
        return p(P[v]);
}

int main()
{
    fi>>N>>M;
    for (i=1;i<=N;i++)
    {
        P[i]=i;
        NR[i]=1;
    }
    for (op=1;op<=M;op++)
    {
        fi>>tip;
        if (tip==1)
        {
            fi>>a>>b;
            rada=p(a);
            radb=p(b);
            if (rada==radb)
                ;
            else
                if (NR[rada]<=NR[radb])
                {
                    NR[radb]+=NR[rada];
                    P[rada]=radb;
                }
                else
                {
                    NR[rada]+=NR[radb];
                    P[radb]=rada;
                }
        }
        else
        {
            fi>>a>>b;
            rada=p(a);
            radb=p(b);
            if (rada==radb)
                fo<<"DA\n";
            else
                fo<<"NU\n";
        }
    }
    fi.close();
    fo.close();
    return 0;
}