Pagini recente » Cod sursa (job #1055121) | Cod sursa (job #2468528) | Cod sursa (job #370807) | Cod sursa (job #2453873) | Cod sursa (job #2706321)
#include <iostream>
#include <fstream>
#include <vector>
#define MX 200001
#define inf 2147483647
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int n, m, total;
vector < pair<int,int> > v[MX];
int key[MX], P[MX];
bool fr[MX];
void citire()
{
fin>>n>>m;
int x, y, cost;
for(int i=1;i<=m;i++)
{
fin>>x>>y>>cost;
v[x].push_back({y,cost});
v[y].push_back({x,cost});
}
fin.close();
}
int min_key()
{
int minim=inf, ind=0;
for(int i=1;i<=n;i++)
{
if(fr[i]==false and key[i]<minim)
{
minim=key[i];
ind=i;
}
}
total+=minim;
return ind;
}
void Prim(int start)
{
for(int i=1;i<=n;i++)
key[i]=inf;
key[start]=0;
P[start]=start;
int nod, vecin, cost;
for(int i=1;i<=n;i++)
{
nod=min_key();
fr[nod]=true;
for(int i=0;i<v[nod].size();i++)
{
vecin=v[nod][i].first;
cost=v[nod][i].second;
if(fr[vecin]==false and cost<key[vecin])
{
key[vecin]=cost;
P[vecin]=nod;
}
}
}
}
void afisare()
{
fout<<total<<'\n';
fout<<n-1<<'\n';
for(int i=2;i<=n;i++)
fout<<P[i]<<' '<<i<<'\n';
fout.close();
}
int main()
{
citire();
Prim(1);
afisare();
return 0;
}