Cod sursa(job #2392435)

Utilizator T_george_TGeorge Teodorescu T_george_T Data 29 martie 2019 23:27:59
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
#define NMAX 100001
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 x,int y){
    int a=Find(x),b=Find(y);
    if(s[a]>s[b])
        swap(a,b);
        father[a]=b;
        s[b]+=s[a];
}
int main()
{
    in>>n>>m;
    for(int i=1;i<=n;i++)
        father[i]=i;
    memset(s,1,sizeof(s));
    for(int i=1;i<=m;i++){
        int tip,a,b;
        in>>tip>>a>>b;
        if(tip==1)
            Union(a,b);
        else{
            if(Find(a)==Find(b))
                out<<"DA"<<endl;
            else
                out<<"NU"<<endl;
        }
    }
    return 0;
}