Cod sursa(job #2425416)

Utilizator cochinteleandreeaCochintele Andreea Elena cochinteleandreea Data 24 mai 2019 19:58:28
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <vector>
#include <set>
#include <fstream>
#include <limits.h>
#include <utility>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
 int n,m,ct,total;
int a,b,cost;

int main()
{

   f>>n>>m;
   vector<vector<pair<int,int> > >mat(n+1);

   for(int i=0;i<m;i++)
   {
       f>>a>>b>>cost;
       mat[a].push_back(make_pair(cost,b));
       mat[b].push_back(make_pair(cost,a));
   }

    vector<int> d(n+1,INT_MAX);
    vector<int> t(n+1,1);

    d[1]=0;
    t[1]=0;

    set<pair<int,pair<int,int> > >s;

    for(auto muchie:mat[1])
        s.insert({muchie.first,{1,muchie.second}});


    while(ct<n-1)
    {
        pair<int,pair<int,int> >pt=*(s.begin());
        s.erase(s.begin());

        if(d[pt.second.second]==INT_MAX)
        {
             d[pt.second.second]=pt.first;
            t[pt.second.second]=pt.second.first;
            ct++;
            for(auto muchie:mat[pt.second.second])
            {
                if(d[muchie.second]==INT_MAX)
                    s.insert({muchie.first,{pt.second.second,muchie.second}});

            }
        }
    }


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

    g<<total<<'\n';
    g<<n-1<<'\n';

    for(int i=2;i<n+1;i++)
        g<<i<<' '<<t[i]<<'\n';
    return 0;
}