Cod sursa(job #259974)

Utilizator dodo19Tica Doris dodo19 Data 16 februarie 2009 11:22:28
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<iostream>
#include<fstream>

using namespace std;

ifstream fin("apm.in");
ofstream fout("apm.out");

long n,m;
int c[20],nr,S;

struct graf {
	int x,y,cost;
};
graf a[40];

void citire () {
	fin>>m>>n;
	for(int i=0;i<n;i++)
		fin>>a[i].x>>a[i].y>>a[i].cost;
}

void Sort2(int l,int  r){
int i=l,j= r,x= a[(l+r)/2].cost;
    do{
	  while (a[i].cost<x)
		 i++;
	  while (x < a[j].cost)
		 j--;
	  if (i<= j) {
		 graf y=a[i];
		 a[i]= a[j];
		 a[j]= y;
		 i++;
		 j--;
	  }
    }
    while(i<=j);
    if (l<j)
		Sort2(l,j);
    if (i<r)
		Sort2(i,r);

}
void sort () {
	Sort2(0,m-1);
}

void form () {
	for(int i=1;i<=m;i++)
		c[i]=i;
	for(int i=0;i<n && nr<m-1;i++)
		if(c[a[i].x]!=c[a[i].y]) {
			S+=a[i].cost;
			nr++;
			fout<<a[i].x<<" "<<a[i].y<<endl;
			for(int j=1;j<n;j++)
				if(c[j]==c[a[i].y])
					c[j]=c[a[i].x];

		}
}

int main () {
	citire();
	sort();
	form();
	fout<<nr<<" "<<S<<endl;
	fin.close();
	fout.close();
	return 0;
}