Pagini recente » Cod sursa (job #2391237) | Cod sursa (job #320477) | Cod sursa (job #1238350) | Cod sursa (job #92758) | Cod sursa (job #2541232)
#include<bits/stdc++.h>
#pragma GCC optimize("O3")
#define fi first
#define sc second
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
vector<pair<int, int> > v[200001];
int n, m;
bool viz[200001];
set<pair<int, pair<int, int> > >s;
vector<pair<int, pair<int, int> > >ans;
int sol;
void Prim(int nod)
{
viz[nod]=1;
for(int i=0; i<v[nod].size(); i++)
s.insert({v[nod][i].sc, {nod, v[nod][i].fi}});
while(!s.empty())
{
int from=(*s.begin()).sc.fi;
int to=(*s.begin()).sc.sc;
int c=(*s.begin()).fi;
s.erase(s.begin());
if(!viz[to])
{
ans.push_back({c, {from, to}});
viz[to]=1;
for(int i=0; i<v[to].size(); i++)
s.insert({v[to][i].sc, {to, v[to][i].fi}});
}
}
}
int main()
{
f>>n>>m;
for(int i=1; i<=m; i++)
{
int x, y, cost;
f>>x>>y>>cost;
v[x].push_back({y, cost});
v[y].push_back({x, cost});
}
Prim(1);
for(int i=0; i<ans.size(); i++)
sol+=ans[i].fi;
g<<sol<<'\n';
g<<ans.size()<<'\n';
for(int i=0; i<ans.size(); i++)
g<<ans[i].sc.fi<<' '<<ans[i].sc.sc<<'\n';
return 0;
}
/*9 14
1 2 10
1 3 -11
2 4 11
2 5 11
5 6 13
3 4 10
4 6 12
4 7 5
3 7 4
3 8 5
8 7 5
8 9 4
9 7 3
6 7 11
*/