Pagini recente » Cod sursa (job #2240088) | Cod sursa (job #800020)
Cod sursa(job #800020)
#include<iostream>
#include<cstdio>
#define NMAX 200005
#define MMAX 400005
using namespace std;
struct Muchie {int e1,e2,cost;};
Muchie G[MMAX];
int A[NMAX],c[NMAX];
int n,m,i,j,mini,maxi,NrMSel;
void Citire()
{
int i;
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=m;++i)
scanf("%d%d%d",&G[i].e1,&G[i].e2,&G[i].cost);
for(i=1;i<=n;++i)
c[i]=i;
}
void SortareMuchii(int st,int dr)
{
int i,j;Muchie x;
if(st<dr)
{
x=G[st]; i=st; j=dr;
while(i<j)
{
while(i<j&&G[j].cost>=x.cost)
j--;
G[i]=G[j];
while(i<j&&G[j].cost<=x.cost)
i++;
G[j]=G[i];
}
G[i]=x;
SortareMuchii(st,i-1);
SortareMuchii(i+1,dr);
}
}
void Afisare()
{
int i,CostAPM=0;
for(i=1;i<n;++i)
{
CostAPM+=G[A[i]].cost;
}
printf("%d\n",CostAPM);
for(i=1;i<n;++i)
printf("%d %d\n",G[A[i]].e1,G[A[i]].e2);
}
int main()
{
Citire();
SortareMuchii(1,m);
NrMSel=0;
for(i=1; NrMSel<n-1; ++i)
if(c[G[i].e1]!=c[G[i].e2])
{
A[++NrMSel]=i;
if(c[G[i].e1]<c[G[i].e2])
{
mini=c[G[i].e1];
maxi=c[G[i].e2];
}
else
{
maxi=c[G[i].e1];
mini=c[G[i].e2];
}
for(j=1;j<=n;++j)
if(c[j]==maxi)
c[j]=mini;
}
Afisare();
return 0;
}