Cod sursa(job #380018)

Utilizator totiotot io totio Data 4 ianuarie 2010 17:05:47
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
using namespace std;
#include <cstdio>
#include <algorithm>

struct muchie{
	int i,j;
	int cost;
	friend int operator<(const muchie &a, const muchie &b){
		return a.cost<b.cost;
	}
};

muchie v[400004];
int n,m,t[200002],a[200002],na;

int radacina(int x){
	int y=x,tmp;
	while(t[x])
		x=t[x];
		
	while(t[y])
		tmp=t[y],t[y]=x,y=tmp;
	return x;
}

int main(){
	freopen("apm.in","r",stdin);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;++i)
		scanf("%d%d%d" , &v[i].i , &v[i].j , &v[i].cost);
	sort(v+1,v+m+1);
	for(int i=1;i<=m;++i){
		int ri=radacina(v[i].i),rj=radacina(v[i].j);
		if(ri!=rj)
			a[na++]=i,	t[ri]=rj;
	}
	int s=0;
	for(int i=0;i<na;++i)
		s+=v[a[i]].cost;
	freopen("apm.out","w",stdout);
	printf("%d\n%d\n",s,na);
	for(int i=0;i<na;++i)
		printf("%d %d\n",v[a[i]].i,v[a[i]].j);
	return 0;
}