Cod sursa(job #2148965)

Utilizator CatapaPap Catalin Catapa Data 2 martie 2018 10:53:10
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.82 kb
#include <iostream>
#include <fstream>
#include <algorithm>


using namespace std;

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

const int nmax = 200005;
const int mmax = 400005;

struct muchie
{
    int x,y,cost;
};

muchie a[mmax];

int parinte[nmax], cmin, siz_arb, parx, pary, n, m, i;
vector<int>ras[3];
vector<pair<int,int>> muchiiArb;

bool cmp(muchie A, muchie B)
{
    return A.cost<B.cost;
}

int parent(int nod)
{
    if(parinte[nod]==nod)
        return nod;
    /*else
        parinte[nod] = parent(parinte[nod]);
    return parinte[nod];*/
    return parinte[nod] = parent(parinte[nod]);
}

void unite(int nodA, int nodB)
{
    /*int parinteA, parinteB;
    parinteA = parinte[nodA];
    parinteB = parinte[nodB];
    parinte[parinteA] = parinteB;*/
    parinte[parent(nodA)] = parent(nodB);
}


int main()
{
    f >> n >> m;
    for(int i=1; i<=m; i++)
    {
         f >> a[i].x >> a[i].y >> a[i].cost;
         //cout << a[i].x << ' ' << a[i].y << ' ' << a[i].cost << "\n";
    }


    for(int i=1; i<=n; i++)
        parinte[i] = i;

    sort(a+1, a+m+1, cmp);

    for(int i=1; i<=m; i++)
    {
         //f >> a[i].x >> a[i].y >> a[i].cost;
         cout << a[i].x << ' ' << a[i].y << ' ' << a[i].cost << "\n";
    }

    int i=1;

    while(siz_arb != n-1)
    {
        //cout << siz_arb << ' ';

        parx = parent(parinte[a[i].x]);
        pary = parent(parinte[a[i].y]);

        if(parx != pary)
        {
            muchiiArb.push_back({parx,pary});
            cmin += a[i].cost;
            unite(parx, pary);
            siz_arb++;
        }

        i++;
    }

    //cout << cmin << "\n";
    //cout << n-1 << "\n";
    cout << "\n\n\n";
    for(auto i:muchiiArb)
        cout << i.second << ' ' << i.first << "\n";
    return 0;
}