Pagini recente » Cod sursa (job #2795056) | Cod sursa (job #1170569) | Cod sursa (job #2002799) | Cod sursa (job #2816150) | Cod sursa (job #2425330)
#include <fstream>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
vector<pair<int,int> >v[200005];
pair<int,int>q,p;
struct muchie{int x,y,d;}s[200005];
priority_queue<pair<int,int> > C,Ct;
bool viz[200005];
int main()
{int N,M,i,x,y,d,sol=0,ct=0;
//pair<int,int>c;
int c;
fin>>N>>M;
for(i=1;i<=M;i++)
{fin>>x>>y>>d;
q.first=-d;
q.second=y;
p.first=-d;
p.second=x;
v[x].push_back(q);
v[y].push_back(p);
}
for(i=0;i<v[1].size();i++)
{C.push(v[1][i]);
Ct.push(make_pair(v[1][i].first,1));
}
viz[1]=1;
while(!C.empty())
{//c=C.front;
while(!C.empty()&&viz[C.top().second]==1)
{C.pop();
Ct.pop();
}
if(!C.empty()) {c=C.top().second;
sol+=-C.top().first;
//cout<<C.top().first<<"\n";
ct++;
s[ct].x=Ct.top().second;
s[ct].y=C.top().second;
s[ct].d=C.top().first;
viz[c]=1;
}
//cout<<"ahhh";
if(!C.empty()){C.pop();Ct.pop();}
//viz[c.second]=1;
for(i=0;i<v[c].size();i++)
if(viz[v[c][i].second]==0){C.push(v[c][i]);Ct.push(make_pair(v[c][i].first,c));}
}
fout<<sol<<"\n";
fout<<N-1<<"\n";
for(i=1;i<=N-1;i++)
fout<<s[i].x<<" "<<s[i].y<<"\n";
}