Pagini recente » Cod sursa (job #2494263) | Istoria paginii runda/ojiliis | Cod sursa (job #3004948) | Cod sursa (job #1611355) | Cod sursa (job #639599)
Cod sursa(job #639599)
#include <stdio.h>
#include <queue>
#include <vector>
#include <algorithm>
#define NMAX 200005
#define pii pair <int,int>
#define pb push_back
#define mp make_pair
#define f first
#define s second
using namespace std;
vector <pii> A[NMAX];
priority_queue < pair <int,pii> > H;
vector <pii> sol;
int n,m,rez;
char marc[NMAX];
int main()
{
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
scanf("%d%d",&n,&m);
int i,j,x,y,z;
for (i=1; i<=m; i++)
{
scanf("%d%d%d",&x,&y,&z);
A[x].pb(mp(y,z));
A[y].pb(mp(x,z));
}
for (i=0; i<A[1].size(); i++)
{
x=A[1][i].f; y=A[1][i].s;
H.push(mp(-y,mp(x,1)));
}
marc[1]=1;
for (i=2; i<=n; i++)
{
while (marc[H.top().s.f])
H.pop();
x=H.top().s.f; y=H.top().f;
sol.pb(H.top().s);
H.pop();
rez+=-y;
marc[x]=1;
for (j=0; j<A[x].size(); j++)
{
y=A[x][j].f; z=A[x][j].s;
if (!marc[y])
H.push(mp(-z,mp(y,x)));
}
}
printf("%d\n",rez);
printf("%d\n",sol.size());
for (i=0; i<sol.size(); i++)
printf("%d %d\n",sol[i].f,sol[i].s);
return 0;
}