Cod sursa(job #1134552)

Utilizator vlad.rusu11Rusu Vlad vlad.rusu11 Data 6 martie 2014 18:52:55
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <fstream>
#include <vector>
#include <algorithm>
#define NMax 200001
using namespace std;

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

inline int cmp(muchie a, muchie b)
{
    return a.cost < b.cost;
}

vector<muchie> muchii, sol;
muchie aux;
int N, M, v[NMax], muchii_puse, i, j, cost_total;
vector<int> vecini[NMax];

int main()
{
    ifstream fin("apm.in");
    ofstream fout("apm.out");

    fin >> N >> M;
    for(i = 1 ; i <= M; ++i)
    {
        fin >> aux.x >> aux.y >> aux.cost;
        muchii.push_back(aux);
    }
    sort(muchii.begin(), muchii.end(), cmp);

    for(i = 1 ; i <= N ; ++i)
        v[i] = i;

    for(vector<muchie>::iterator it = muchii.begin() ; (it != muchii.end()) && (muchii_puse < N) ; ++it)
    {
        i = it->x;
        j = it->y;

        if(v[i] != v[j])
        {
            i = v[i];
            j = v[j];
            for(vector<int>::iterator ite = vecini[j].begin() ; ite != vecini[j].end() ; ++ite)
            {
                v[*ite] = i;
                vecini[i].push_back(*ite);
            }
            v[j] = i;
            vecini[i].push_back(j);
            ++muchii_puse;
            sol.push_back(*it);
            cost_total += it->cost;
        }
    }

    for(vector<muchie>::iterator it = sol.begin() ; it != sol.end() ; ++it)
        fout << it->x << ' ' << it->y << '\n';

    fin.close();
    fout.close();
    return 0;
}