Cod sursa(job #677059)

Utilizator alexandru93moraru alexandru sebastian alexandru93 Data 9 februarie 2012 20:34:10
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<fstream>
#include<vector>
#include<algorithm>
#define maxn 400010
using namespace std;
int N,M,nr,suma;
int P[maxn];
vector <int> id;
struct arc{
	int x,y,c;
}V[maxn];

ifstream f("apm.in");
ofstream g("apm.out");

void citire(){
	f>>N>>M;
	for(int i=1;i<=M;i++)
		f>>V[i].x>>V[i].y>>V[i].c;
}

bool cmp(arc i,arc j){
	return(i.c<j.c);
}

int padure(int i){
	if(P[i]==i) 
		return i;
	P[i]=padure(P[i]);
	return P[i];
}

int main(){
	citire();
	for(int i=1;i<=N;i++)
		P[i]=i;
	sort(V+1,V+M+1,cmp);
	
	for(int i=1;i<=M&&nr<=N-1;i++){
		if(padure(V[i].x)!=padure(V[i].y)){
			suma+=V[i].c;
			id.push_back(i);
			P[padure(V[i].x)]=padure(V[i].y);
			nr++;
		}
	}
	g<<suma<<'\n'<<nr<<'\n';
	
	for(int i=0;i<nr;i++)
		g<<V[id[i]].x<<' '<<V[id[i]].y<<'\n';
	g.close();
	return 0;
}