Cod sursa(job #2372219)

Utilizator CodCatalinCodreanu Catalin CodCatalin Data 6 martie 2019 22:38:17
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>
using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

int n,m,v[100003],ad[100003],c,x,y;
int Find(int a)
{
    int p=a,q;
    while(v[p]!=p)p=v[p];
    while(v[x]!=x)
    {
        q=v[x];
        v[x]=p;
        x=q;
    }
    return p;
}
void unite(int a,int b)
{
    if(ad[a]>ad[b])
         v[b]=a;
    else v[a]=b;

    if(ad[a]==ad[b])ad[b]++;
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=n;++i)v[i]=i,ad[i]=1;
    for(int i=1;i<=m;++i)
    {
        f>>c>>x>>y;
        if(c==1)
        {
            unite(Find(x),Find(y));
        }
        else
        {
            if(Find(x)==Find(y))g<<"DA";
            else g<<"NU";
            g<<'\n';
        }
    }
    return 0;
}