Pagini recente » Cod sursa (job #862618) | Cod sursa (job #1382182) | Cod sursa (job #1061217) | Cod sursa (job #1061250) | Cod sursa (job #1942905)
#include <fstream>
#include <vector>
#include <queue>
#include <string.h>
#define INF 9999999
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
int d[200001],tata[200001],viz[200001],i,n,m,x,y,c,s,nod,nr,ult,a,b;
vector <pair <int , int > > G[200001];
struct compare{
bool operator()(pair<int,int> x, pair<int, int> y){
return x.second>y.second;
}
};
priority_queue<pair <int, int>, vector<pair <int, int> >, compare> heap;
int main()
{
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>a>>b>>c;
G[a].push_back(make_pair(b,c));
G[b].push_back(make_pair(a,c));
}
for(i=1;i<=n;i++)
d[i]=INF;
d[1]=0;
tata[1]=0;
viz[1]=1;
nr=1;
for(i=0;i<G[1].size();i++)
{
d[G[1][i].first]=G[1][i].second;
tata[G[1][i].first]=1;
heap.push(G[1][i]);
ult=G[1][i].first;
}
while(nr!=n-1&&!heap.empty()){
nod=heap.top().first;
if(viz[nod]==1)
{
heap.pop();
continue;
}
else{
nr++;
viz[nod]=1;
for(i=0;i<G[nod].size();i++){
if(d[G[nod][i].first]>G[nod][i].second&&viz[G[nod][i].first]==0){
d[G[nod][i].first]=G[nod][i].second;
tata[G[nod][i].first]=nod;
heap.push(G[nod][i]);
}
}
}
}
for(i=1;i<=n;i++)
s+=d[i];
g<<s<<'\n';
g<<n-1<<'\n';
for(i=2;i<=n;i++)
g<<i<<" "<<tata[i]<<'\n';
return 0;
}