Pagini recente » Cod sursa (job #602194) | Cod sursa (job #298492) | Cod sursa (job #949859) | Cod sursa (job #2879674) | Cod sursa (job #3121016)
#include <fstream>
#include <set>
#include <vector>
#include <bitset>
#define inf 2000000000
using namespace std;
ifstream fin ("apm.in");
ofstream fout ("apm.out");
int n,m,x,y,sum,c,i,d[200001],t[200001];
vector < pair <int,int> > v[200001];
set < pair <int,int> > s;
bitset <200001> viz;
int main()
{
fin>>n>>m;
for (i=1; i<=m; i++)
{
fin>>x>>y>>c;
v[x].push_back (make_pair (y,c));
v[y].push_back (make_pair (x,c));
}
for (i=1; i<=n; i++)
d[i]=inf;
d[1]=0;
t[1]=-1;
s.insert (make_pair (0,1));
while (!s.empty ())
{
int nod=s.begin ()->second;
s.erase (s.begin ());
if (viz[nod]==1)
continue;
viz[nod]=1;
for (i=0; i<v[nod].size (); i++)
{
int cost=v[nod][i].second;
int vecin=v[nod][i].first;
if (viz[vecin]==0&&d[vecin]>cost)
{
s.insert ({cost,vecin});
d[vecin]=cost;
t[vecin]=nod;
}
}
}
for (i=1; i<=n; i++)
sum+=d[i];
fout<<sum<<"\n"<<n-1<<"\n";
for (i=2; i<=n; i++)
fout<<t[i]<<" "<<i<<"\n";
return 0;
}