Pagini recente » Cod sursa (job #444821) | Cod sursa (job #393608) | Cod sursa (job #2316464) | Cod sursa (job #2190675) | Cod sursa (job #1883238)
#include<fstream>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
struct MUCHIE{
int x, y, c;
}M[200000];
int dis[200000];
void qs( int st, int dr ){
int i, j, dir;
if( st < dr ){
dir = 1;
i = st;
j = dr;
while( i != j ){
if( dir == 1 )
if( M[i].c < M[j].c )
i++;
else{
swap(M[i],M[j]);
dir = -1;
j--;
}
else
if( M[i].c < M[j].c )
j--;
else{
swap(M[i],M[j]);
dir = 1;
i++;
}
}
qs(st, i - 1);
qs(i+1, dr);
}
}
int stramos( int x ){
if(dis[x] == x)
return x;
else
return stramos(dis[x]);
}
int main(){
int n, m, i, j, nrm, poz, sum;
f >> n >> m;
for( i = 0; i < m; i++ )
f >> M[i].x >> M[i].y >> M[i].c;
qs(0,m-1);
/*for( i = 0; i < m; i++ )
g << M[i].x << " " << M[i].y << " " << M[i].c << endl;*/
for( i = 1; i <= n; i++ )
dis[i] = i;
nrm = poz = 0;
sum = 0;
for( i = 0; i < n - 1; i++ ){
while( stramos(M[poz].x) == stramos(M[poz].y) )
poz++;
dis[stramos(M[poz].y)] = dis[stramos(M[poz].x)];
sum += M[poz].c;
M[i] = M[poz];
poz++;
}
g << sum << endl;
for( i = 0; i < n - 1; i++ )
g << M[i].x << " " << M[i].y << endl;
return 0;
}