Cod sursa(job #1883232)

Utilizator RaTonAndrei Raton RaTon Data 17 februarie 2017 20:25:38
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#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;
}