Cod sursa(job #965587)

Utilizator crisbodnarCristian Bodnar crisbodnar Data 24 iunie 2013 11:21:11
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <algorithm>
#include <fstream>
#include <vector>

#define N 200005
#define a second.first
#define b second.second

using namespace std;

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

typedef pair <int, int> muchie;
typedef pair <int, muchie> arb;
vector <arb> graf;
vector <muchie> sol;
vector <int> c(N);
int n, m, cost;

int tata(int x)
{
    if(c[x] != x)
        c[x] = tata(c[x]);
    return c[x];
}

int main()
{
    fin>>n>>m;
    for(int i=0; i<m; i++)
    {
        int x, y, c;
        fin>>x>>y>>c;
        graf.push_back(arb(c, muchie(x, y)));
    }

    for(int i=1; i<=n; i++) c[i] = i;
    sort(graf.begin(), graf.end());
    for(int i=0; sol.size() < n-1 && i < m; i++)
    {
        int x = tata(graf[i].a), y = tata(graf[i].b);
        if(c[x] != c[y])
        {
            c[x] = y;
            cost += graf[i].first;
            sol.push_back(graf[i].second);
        }
    }
    n = sol.size();
    fout<<cost<<'\n'<<n<<'\n';
    for(int i=0; i<n; i++)
        fout<<sol[i].first<<' '<<sol[i].second<<'\n';
    return 0;
}