Cod sursa(job #2397126)

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

int gasesteParinte(vector<int> &p, int i)
{
    if(p[i]==-1)
        return i;
    else return gasesteParinte(p,p[i]);
}

void Union(vector<int> &p, int x, int y)
{
    int xset = gasesteParinte(p, x);
    int yset = gasesteParinte(p, y);
    if(xset!=yset){
       p[xset] = yset;
    }
}

int main()
{
   long int n,m;

    ifstream f("disjoint.in");

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

    vector<int> parinte(n+1,-1);

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

        }
    }

    return 0;
}