Cod sursa(job #2543367)

Utilizator vaidaoctavVaida Octav vaidaoctav Data 11 februarie 2020 08:44:44
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>
#define Max 105000
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int link[Max],siz[Max],n,m;
int findd(int x)
{
    while(x!=link[x])
        x=link[x];
    return x;
}
void unite(int a,int b)
{
    a=findd(a);
    b=findd(b);
    if(siz[a]<siz[b]) swap(a,b);
    siz[a]+=siz[b];
    link[b]=a;
}
bool same(int a,int b)
{
    return findd(a)==findd(b);
}
void kruskal()
{
        f>>n>>m;
    for(int i=1;i<=n;i++)
    {
        link[i]=i;
        siz[i]=1;
    }
    for(int i=1;i<=m;i++)
    {
        int cod,a,b;
        f>>cod>>a>>b;
        if(cod==1 && !same(a,b))
            unite(a,b);
        if(cod==2)
            if(same(a,b)) g<<"DA"<<'\n';
            else g<<"NU"<<'\n';

    }

}
int main()
{
kruskal();
    return 0;
}