Pagini recente » Cod sursa (job #82463) | Cod sursa (job #2130920) | Cod sursa (job #889493) | Cod sursa (job #2812197) | Cod sursa (job #1674529)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
vector <pair<int,int>> G[200005];
int n,m;
void prim()
{
vector <int> mark(n+1,0);
vector <int> edge(n+1,-1);
set<pair<int,pair<int,int>>> s;
s.insert({0,{0,1}});
int total=0;
while(!s.empty())
{
int a = s.begin()->second.second;
int b = s.begin()->second.first;
int cost = s.begin()->first;
s.erase(s.begin());
if(!mark[a])
{
total += cost;
edge[a] = b;
mark[a] = 1;
for(auto u : G[a])
if(!mark[u.first])
s.insert({u.second,{a,u.first}});
}
}
g<<total<<"\n"<<n-1<<"\n";
for(int i=2;i<=n;i++)
g<<i<<" "<<edge[i]<<"\n";
}
int main()
{
int a,b,c;
f>>n>>m;
for(int i=0;i<m;i++)
{
f>>a>>b>>c;
G[a].push_back(make_pair(b,c));
G[b].push_back(make_pair(a,c));
}
f.close();
prim();
g.close();
}