Cod sursa(job #2397705)

Utilizator tudose_bogdanTudose Bogdan tudose_bogdan Data 4 aprilie 2019 18:17:57
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.56 kb
#include <iostream>

#include <fstream>

#include <vector>

using namespace std;





void Union(vector<int> &comp,vector<vector<int>> &subset, int x, int y)

{



   int xr=comp[x];

   int yr=comp[y];



   if(subset[comp[x]].size() <= subset[comp[y]].size())

   {

       int size1=subset[xr].size();

       for(int i=0;i<size1;i++)

       {

           subset[yr].push_back(subset[xr][i]);

           comp[subset[xr][i]]=yr;

       }

       subset[xr].clear();



   }else {

       int size2(subset[yr].size());

       for(int i=0;i<size2;i++)

       {





        subset[xr].push_back(subset[yr][i]);

       comp[subset[yr][i]]=xr;

       }



   subset[yr].clear();

   }

}





int main()

{

   int n,m;



    ifstream f("disjoint.in");

    ofstream g("disjoint.out");



     f>>n>>m;

     int op,op1,op2;



    vector<vector<int>> subset(n+1);

    vector<int> comp(n+1);

    for(int i=1;i<=n;i++)

    {

        comp[i]=i;

        subset[i].push_back(i);

    }











    for(int i=0;i<m;i++)

    {

        f>>op>>op1>>op2;

        switch(op)

        {

        case 1:

            {

                Union(comp,subset,op1,op2);

                    break;

            }

        case 2:

            {

                if(comp[op1]==comp[op2])

                    g<<"DA\n";

                else g<<"NU\n";

                break;

            }



        }

    }



    return 0;

}