Pagini recente » Cod sursa (job #1793437) | Cod sursa (job #1702120) | Cod sursa (job #247059) | Cod sursa (job #1128918) | Cod sursa (job #1260320)
#include <vector>
#include <cstdio>
#include <algorithm>
using namespace std;
#define NMAX 200007
#define S second
#define F first
int X,Y,cost,M,N,total,i;
vector < pair < int , pair < int , int > > > w;
vector < pair < int , int > > sol;
int T[NMAX];
int multime(int node)
{
int rang;
(T[node]==node) ? rang=node : rang=multime(T[node]);
T[node]=rang;
return T[node];
}
int main()
{
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
for (scanf("%d%d",&N,&M);M;--M)
{
scanf("%d%d%d",&X,&Y,&cost);
w.push_back(make_pair(cost,make_pair(X,Y)));
}
for (i=1;i<=N;++i) T[i]=i;
sort(w.begin(),w.end());
for (i=0;i<w.size();++i)
{
if (multime(w[i].S.F)==multime(w[i].S.S)) continue;
T[multime(w[i].S.S)]=w[i].S.F;
sol.push_back(make_pair(w[i].S.F,w[i].S.S));
total+=w[i].F;
}
for (printf("%d %d\n",total,sol.size()),i=0;i<sol.size();++i)
printf("%d %d\n",sol[i].F,sol[i].S);
return 0;
}