Cod sursa(job #2515514)

Utilizator thedorbulacovschittrter thedorbulacovschi Data 28 decembrie 2019 19:03:33
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 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]);
        poz[b[i]]=poz[a[0]];
    }
}

void _1(int x,int y){
    if(v[poz[x]].size()>v[poz[y]].size())
        un(v[poz[x]],v[poz[y]]);
    else
        un(v[poz[y]],v[poz[x]]);
}

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;
}