Cod sursa(job #584660)

Utilizator suzanicaSuzanica Mihu suzanica Data 26 aprilie 2011 12:14:50
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include<fstream>
#define inf 10000

using namespace std;
 ifstream f("prim.in");
 ofstream g("prim.out");
int n,r,i,vfmin,nrv;
double G[100][100],cmin[100],costmin;
int p[100],z[100];
void initializare()
{
	int i,j,k;
	double c;
	f>>n>>r;
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			G[i][j]=inf;
      for(i=1;i<=n;i++)
	  {
		  G[i][i]=0;
		  f>>nrv;
		  for(j=1;j<=nrv;j++)
		  {
			  f>>k>>c;
			  G[i][k]=c;
		  }
	  }
  for(i=1;i<=n;i++)
  {
	  cmin[i]=G[r][i];
	  p[i]=r;
	  z[i]=1;
  }
  z[r]=0;
  p[r]=0;
  nrv=n-1;
}
void afisare()
{
	int i;
	double cost=0;
	for(i=1;i<=n;i++)
	if(i!=r)
	{
		g<<p[i]<<" "<<i<<"\n";
		cost+=G[i][p[i]];
	}
	g<<"\n";
	g<<cost;
}
int main()
{
	initializare();
	while(nrv)
	{
		costmin=inf;
		for(i=1;i<=n;i++)
			if(z[i]&&costmin>cmin[i])
			{
				costmin=cmin[i];
				vfmin=i;
			}
			z[vfmin]=0;
			nrv--;
			for(i=1;i<=n;i++)
				if(z[i]&&G[i][vfmin]<cmin[i])
				{
					p[i]=vfmin;
					cmin[i]=G[i][vfmin];
				}
	}
	afisare();
	return 0;
}