Cod sursa(job #516159)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 23 decembrie 2010 12:17:34
Problema Arbore partial de cost minim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<stdio.h>
#include<algorithm>
using namespace std;

FILE*f=fopen("apm.in","r");
FILE*g=fopen("apm.out","w");

int N,M,i,Cost,sol[200005],T[200005],k;
int root(int nod){
	while ( T[nod] > 0 )
		nod = T[nod];
	
	return nod;
}

struct mch{
	int x;
	int y;
	int cst;
}W[400005];

int cmp(mch a,mch b){
	return a.cst < b.cst;
}

int main () {
	
	fscanf(f,"%d %d",&N,&M);
	
	for ( i = 1 ; i <= M ; ++i ){
		fscanf(f,"%d %d %d",&W[i].x,&W[i].y,&W[i].cst);
	}
	
	sort(W+1,W+M+1,cmp);
	
	for ( i = 1 ; i <= N ; ++i )
		T[i] = -1;
	
	for ( i = 1 ; i <= M && k < N - 1 ; ++i ){
		
		if ( root(W[i].x) != root(W[i].y) ){
			sol[++k] = i ;
			
			T[root(W[i].x)] = root(W[i].y);
			
			Cost += W[i].cst;
			
		}
		
		
	}
	
	fprintf(g,"%d\n%d\n",Cost,k);
	
	for ( i = 1 ; i <= k ; ++i ){
		fprintf(g,"%d %d\n",W[sol[i]].x,W[sol[i]].y);
	}
	
	
	fclose(f);
	fclose(g);
	
	return 0;
}