Pagini recente » Cod sursa (job #666715) | Cod sursa (job #1741727) | Cod sursa (job #897087) | Cod sursa (job #354280) | Cod sursa (job #2425416)
#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;
}