Cod sursa(job #2672649)

Utilizator maraboneaMara Bonea marabonea Data 14 noiembrie 2020 12:39:48
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
/**
infoarena.ro/problema/disjoint
Paduri de multimi disjuncte
*/
#include <fstream>

using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int nmax=100005;
int vt[nmax],r[nmax];
int n,m;
int radacina(int x)
{
    while(vt[x]!=x)
        x=vt[x];
    return x;
}
int unire(int x,int y)
{
    if(r[x]>r[y])
        vt[y]=x;
    if(r[x]<r[y])
        vt[x]=y;
    if(r[x]==r[y])
    {
        vt[x]=y;
        r[y]++;
    }
}
int main()
{
   fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        vt[i]=i;
    }
    int t,x,y;
    while(m--)
    {
        fin>>t>>x>>y;
        if(t==1)
            unire(radacina(x),radacina(y));
        if(t==2)
            if(radacina(x)==radacina(y))
                fout<<"DA"<<endl;
            else
                fout<<"NU"<<endl;

    }
   return 0;
}