Cod sursa(job #1493819)

Utilizator tiby10Tibi P tiby10 Data 29 septembrie 2015 22:26:01
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include<bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
#define MAXN 100005
int n, m, Set[MAXN], Size[MAXN];

void Merge(int where, int who){
    if(!Size[who])
        return;
    for(int i=1; i<=n && Size[who]; ++i)
        if(Set[i]==Set[who]){
            Set[i]=Set[where];
            ++Size[where], --Size[who];
    }
}

void Union(int a, int b){
    int m1=Set[a], m2=Set[b];
    if(Size[m1]>Size[m2])
        Merge(m1, m2);
    else Merge(m2, m1);
}

int main(){
    fin>>n>>m;
    int cod, x, y;
    for(cod=1; cod<=n; ++cod)
        Set[cod]=cod, Size[cod]=1;
    while(m--){
        fin>>cod>>x>>y;
        if(cod==1) Union(x, y);
        else fout<<((Set[x]==Set[y])?"DA\n":"NU\n");
    }
    return 0;
}