Pagini recente » Cod sursa (job #144930) | Cod sursa (job #571484) | Cod sursa (job #356744) | Cod sursa (job #140848) | Cod sursa (job #681126)
Cod sursa(job #681126)
#include <cstdio>
#include <algorithm>
#include <vector>
#define Nmax 400010
using namespace std;
FILE *fin=freopen("apm.in","r",stdin);
FILE *fout=freopen("apm.out","w",stdout);
int n,m,gr[Nmax],s;
struct muchie
{
int x;
int y;
int c;
}g[Nmax];
bool cmp(muchie a, muchie b)
{
return(a.c<b.c);
}
int grupa(int i)
{
if(gr[i]==i)
return i;
gr[i]=grupa(gr[i]);
return gr[i];
}
void citire()
{
scanf("%d %d\n",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d %d %d\n",&g[i].x,&g[i].y,&g[i].c);
}
}
vector <int> ind;
int main()
{
citire();
for(int i=1;i<=n;i++)
gr[i]=i;
sort(g+1,g+m+1,cmp);
int nr=0;
for(int i=1;i<=m && nr<=n-1;i++)
if(grupa(g[i].x)!=grupa(g[i].y))
{
s+=g[i].c;
ind.push_back(i);
gr[grupa(g[i].x)]=grupa(g[i].y);
nr++;
}
printf("%d\n%d\n",s,n-1);
for (int i=0;i<n-1;i++)
printf("%d %d\n",g[ind[i]].x,g[ind[i]].y);
return 0;
}