Cod sursa(job #2397195)

Utilizator tudose_bogdanTudose Bogdan tudose_bogdan Data 4 aprilie 2019 11:33:21
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;





int gasesteParinte(vector<int> &p, int i)
{
   while(p[i]!=i)
   {
       p[i]=p[p[i]];
       i=p[i];
   }
   return i;
}

void Union(vector<int> &com,vector<int> &parinte, int x, int y)
{
   if(com[x]<com[y])
   {
       int xr=gasesteParinte(parinte,x);
       int yr=gasesteParinte(parinte,y);
       parinte[xr]=parinte[yr];
       com[yr]+=com[xr];

   }else
   {
       int xr=gasesteParinte(parinte,x);
       int yr=gasesteParinte(parinte,y);
       parinte[yr]=parinte[xr];
       com[xr]+=com[yr];
   }

}





int main()
{
   int n,m;

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

     f>>n>>m;
     int op,op1,op2;

    vector<int> componente(n+1,1);
    vector<int> parinte(n+1);
    for(int i=1;i<=n;i++)
        parinte[i]=i;




    for(int i=0;i<m;i++)
    {
        f>>op>>op1>>op2;
        switch(op)
        {
        case 1:
            {
                Union(componente,parinte,op1,op2);
                    break;
            }
        case 2:
            {
                if(gasesteParinte(parinte,op1)==gasesteParinte(parinte,op2))
                    g<<"DA"<<endl;
                else g<<"NU"<<endl;
                break;
            }

        }
    }

    return 0;
}