Cod sursa(job #2515512)

Utilizator thedorbulacovschittrter thedorbulacovschi Data 28 decembrie 2019 19:02:12
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

vector <int> v[100005];
int poz[100005];

void un(vector<int>&a,vector<int>&b){
    for(int i=0;i<b.size();i++)
        a.push_back(b[i]);
}

void _1(int x,int y){
    if(v[poz[x]].size()>v[poz[y]].size()){
        un(v[poz[x]],v[poz[y]]);
        for(int i=0;i<v[poz[y]].size();i++)
            poz[v[poz[y]][i]]=poz[x];
    }
    else{
        un(v[poz[y]],v[poz[x]]);
        for(int i=0;i<v[poz[x]].size();i++)
            poz[v[poz[x]][i]]=poz[y];
    }
}

void _2(int x,int y){
    if(poz[x]==poz[y])
        fout<<"DA"<<'\n';
    else
        fout<<"NU"<<'\n';
}

int n,m,i,j;
int c,x,y;

int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++){
        v[i].push_back(i);
        poz[i]=i;
    }
    for(j=1;j<=m;j++){
        fin>>c>>x>>y;
        if(c==1)
            _1(x,y);
        else
            _2(x,y);
    }
    return 0;
}