Cod sursa(job #2560821)

Utilizator danbesuDan Besu danbesu Data 28 februarie 2020 12:02:57
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>
#define nmax 100002
#define mmax 100002
using namespace std;

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

int n, m, grup[nmax];
vector<int>multimi[nmax];

void unire(int a, int b){
    int ga = grup[a], gb = grup[b];
    for(int i = 0; i < multimi[gb].size(); ++i){
        int x = multimi[gb][i];
        multimi[ga].push_back(x);
        grup[x] = grup[a];
    }
}

int main(){

    in>>n>>m;
    for(int i = 1; i <= n; ++i){
        grup[i] = i;
        multimi[i].push_back(i);
    }

    while(m--){
        int T; in>>T;
        int a,  b; in >> a >> b;

        if(T == 1){
            unire(a, b);
        }
        if(T == 2){
            if(grup[a] == grup[b])
                out<<"DA"<<'\n';
            else out<<"NU"<<'\n';
        }
    }

    in.close();
    out.close();
    return 0;
}