Cod sursa(job #2569882)

Utilizator T_george_TGeorge Teodorescu T_george_T Data 4 martie 2020 14:04:09
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
const int NMAX=100005;
int n,m,father[NMAX],s[NMAX];
int Find(int node){
    if(father[node]==node)
        return node;
    return father[node]=Find(father[node]);
}
void Union(int a,int b){
    int fa=Find(a),fb=Find(b);
    if(fa==fb)
        return;
    if(s[fa]<s[fb])
        swap(fa,fb);
    father[fb]=fa;
    s[fa]+=s[fb];
}
int main()
{
    in>>n>>m;
    for(int i=1;i<=n;i++)
        father[i]=i,s[i]=1;
    for(int i=1,tip,a,b;i<=m;i++){
        in>>tip>>a>>b;
        if(tip==1)
            Union(a,b);
        else{
            if(Find(a)==Find(b))
                out<<"DA";
            else
                out<<"NU";
            out<<'\n';
        }
    }
    return 0;
}