Cod sursa(job #419499)

Utilizator maditzaaciuca madalina maditzaa Data 17 martie 2010 16:56:22
Problema Arbore partial de cost minim Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream.h>
#include <fstream.h>
ifstream f("apm.in");
ofstream g("apm.out");

struct muchie{
	int x,y,c;
};

muchie a[1501],aux,b[1501];

int t[1501],i,j,n,m,cc,cost,k,nr;

void citire(){
	f>>n>>m;
	for(i=1;i<=m;i++){
		f>>a[i].x>>a[i].y>>a[i].c;

	}
}


void reuneste(int i,int j){
	int k;
	i=t[i];
	j=t[j];
	if(i!=j)
		for(k=1;k<=n;k++)
			if(t[k]==i)
				t[k]=j;
}
void kruskal(){
	
	for(i=1;i<m;i++)
		for(j=i+1;j<=m;j++)
			if(a[i].c>a[j].c){
				aux=a[i];
				a[i]=a[j];
				a[j]=aux;
			}
	for(i=1;i<=n;i++)
		t[i]=i;
	for(k=1;k<=m;k++){
		i=a[k].x;
		j=a[k].y;
		cc=a[k].c;
		if(t[i]!=t[j]){
			reuneste(i,j);
			cost+=cc;
			b[nr].x=i;
			b[nr].y=j;
			nr++;
	
		}
	}
	g<<cost<<"\n";
	
	g<<nr<<"\n";
	
	for(i=0;i<nr;i++)
		g<<b[i].x<<" "<<b[i].y<<"\n";
}
int main(){
	citire();
	
	kruskal();
	
	return 0;
	
	f.close();
	g.close();
}