Cod sursa(job #2940285)

Utilizator allee69Aldea Alexia allee69 Data 15 noiembrie 2022 11:01:55
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

int radacina(int x, vector<int> tata)
{
    if(tata[x]==0) return x;
    else return radacina(tata[x],tata);
}

int main()
{
    vector<int> tata;
    vector<int> multime;
    int n,m,c,x,y;
    f>>n>>m;

    tata.resize(n+m,0);
    multime.resize(n+m,0);
    for(int i=0;i<m;i++)
    {
        f>>c>>x>>y;
        int r1= radacina(x,tata), r2=radacina(y,tata);
        if(c==1)
        {
            if(multime[r1] < multime[r2]) tata[r1]=r2;
            else if(multime[r1]==multime[r2]) {tata[r1]=r2; multime[r2]+=1;}
                  else tata[r2]=r1;
        }
        else
        {
            if(r1==r2) g<<"DA"<<endl;
            else g<<"NU"<<endl;
        }
    }
    f.close();
    g.close();

    return 0;
}