Cod sursa(job #2410474)

Utilizator AndreiTudorSpiruAndrei Spiru AndreiTudorSpiru Data 20 aprilie 2019 08:59:03
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>

using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int rm[100001],tt[100001];
int find(int x)
{
    int r,y;
    for( r=x; r!=tt[r];r=tt[r]);

    for(;x!=tt[x];)
    {
        y=tt[x];
        tt[x]=r;
        x=y;
    }
    return r;
}
int unite (int x,int y)
{
    if(rm[x]==rm[y])
    {
     rm[x]++;
     tt[y]=x;
    }
    else if(rm[x]>rm[y])
    {
        tt[y]=x;
    }
    else tt[x]=y;
}
int n,m,i,q,a,b;
int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        tt[i]=i;
        rm[i]=1;
    }
    for(i=1;i<=m;i++)
    {
        f>>q>>a>>b;
        if(q==1)
        {
            if(find(a)!=find(b))unite(find(a),find(b));
        }
        else{
            if(find(a)==find(b))g<<"DA"<<'\n';
            else g<<"NU"<<'\n';
        }
    }
    return 0;
}