Pagini recente » Cod sursa (job #30369) | Cod sursa (job #189656) | Cod sursa (job #2491628) | Cod sursa (job #1948721) | Cod sursa (job #2494954)
//#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
const int Max=200005;
int dist[Max],viz[Max],n,m,cst,tata[Max],sum,nr;
struct compara
{
bool operator()(int x,int y)
{
return dist[x]>dist[y];
}
};
struct muc
{
int x,y;
}muc[Max];
priority_queue <int,vector <int>,compara >q;
vector <pair <int,int> >v[Max];
void citire()
{
in>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y,c; in>>x>>y>>c;
v[x].push_back({y,c});
v[y].push_back({x,c});
}
}
int main()
{
citire();
viz[1]=1;
for(int i=2;i<=n;i++)
dist[i]=INT_MAX;
q.push(1);
while(!q.empty())
{
int nod=q.top(); q.pop(); viz[nod]=1;
for(int j=0;j<v[nod].size();j++)
{
int vecin=v[nod][j].first; int cost=v[nod][j].second;
if(viz[vecin]==0 && dist[vecin]>cost )
{
dist[vecin]=cost; tata[vecin]=nod;
q.push(vecin);
}
}
}
for(int i=1;i<=n;i++)
sum=sum+dist[i];
out<<sum<<"\n";
out<<n-1<<"\n";
for(int i=2;i<=n;i++)
out<<tata[i]<<" "<<i<<"\n";
return 0;
}