Cod sursa(job #2397672)

Utilizator tudose_bogdanTudose Bogdan tudose_bogdan Data 4 aprilie 2019 17:56:17
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 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"<<endl;
                else g<<"NU"<<endl;
                break;
            }

        }
    }

    return 0;
}