Cod sursa(job #2497211)

Utilizator theo2003Theodor Negrescu theo2003 Data 22 noiembrie 2019 11:10:02
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int n, m, p[100001], len[100001];
int up(int i) {
    int tmp = i;
    while(p[tmp] != tmp)
        tmp = p[tmp];
    while(p[i] != i) {
        int tmp1 = i;
        i = p[i];
        p[tmp1] = tmp;
    }
    return tmp;
}
void link(int a, int b) {
    a = up(a);
    b = up(b);
    if(len[a] > len[b])
        p[b] = a;
    else
        p[a] = b;
}
int main() {
    cin>>n>>m;
    for(int x = 1; x<=100000; x++) {
        p[x] = x;
        len[x] = 1;
    }
    while(m--) {
        int a, b, c;
        cin>>a>>b>>c;
        if(a == 1) {
            link(b, c);
        } else if(up(b) == up(c))
            cout<<"DA\n";
        else
            cout<<"NU\n";
    }
    return 0;
}