Cod sursa(job #2075063)

Utilizator andrei5000Andrei Alin andrei5000 Data 25 noiembrie 2017 11:12:15
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
#include <vector>
#include <algorithm>
#define st second.first
#define dr second.second
#define cod first

using namespace std;
int t[100001],n,m,i,k,rx,ry;

pair <int , pair <int , int>> l[100001];



int rad(int x){
    while(t[x]>0)
        x = t[x];
    return x;}

int main()
{
    ifstream f("disjoint.in");
    ofstream g("disjoint.out");
    f >> n >> m;
    for(i=0;i<n;i++)
        f >>l[i].cod >> l[i].st >> l[i].dr;
    for(i=0;i<=m;i++) t[i]=-1;

    for(i=0;i<=n;i++){

        rx = rad(l[i].st);
        ry = rad(l[i].dr);
        if(l[i].cod==1){
        if(rx!=ry){
            if(t[rx]<t[ry]){
                t[rx]+=t[ry];
                t[ry]=rx;}

            else {
                t[ry]+=t[rx];
                t[rx]=ry;}
                }}
          else if(rx==ry) g << "DA\n"; else g << "NU\n";
            }

    return 0;
}