Cod sursa(job #692923)

Utilizator i.anna_mIlusca Ana-Maria i.anna_m Data 26 februarie 2012 20:56:52
Problema Ubuntzei Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include<stdio.h>
#include<vector>
using namespace std;
//vector<int> ck(16);
//vector<vector<int> > mat(2001, vector<int> (2001,0));
//vector<vector<int> > mac(2001, vector<int> (2001,1));
int ck[16][2],mat[2001][2001],mac[2001][2001];
FILE *f,*g;
int main()
{
	f=fopen("ubuntzei.in","r");
	g=fopen("ubuntzei.out","w");
	int n,m,ka,a,b,c,i,j,k;
	fscanf(f,"%d%d%d",&n,&m,&ka);
	for(i=0;i<ka;i++)
		fscanf(f,"%d",&ck[i][0]);
	for(i=0;i<=n;i++)
		for(j=0;j<=n;j++)
			if(i!=j)
				mac[i][j]=1;
	//ck.resize(ka);
	//mat.resize(n,vector<int>(n));
	//mac.resize(n,vector<int>(n));
	for(i=0;i<m;i++)
	{
		fscanf(f,"%d%d%d",&a,&b,&c);
		mat[a][b]=c;
	}
	for(k=1;k<=n;k++)
		for(i=1;i<=n;i++)
			for(j=1;j<=n;j++)
				if(mat[i][k]!=0 && mat[k][j]!=0 && i!=j && ( mat[i][j]>mat[i][k]+mat[k][j] || mat[i][j]==0) )
				{
					mat[i][j]=mat[i][k]+mat[k][j];
					mac[i][j]=mac[i][k]+mac[k][j];
				}
	int x=1,min=99999999,s=0,cka=ka,sh;
	while(x!=n)
	{
		min=999999999;
		if(cka>0)
		{
			for(i=0;i<ka;i++)
				if(mat[x][ck[i][0]]<min && ck[i][1]==0)
				{
					min=mat[x][ck[i][0]];
					sh=i;
				}
			x=ck[sh][0];
			cka--;
			s+=min;
			ck[sh][1]=1;
		}
		else 
		{
			s+=mat[x][n];
			x=n;
		}
	}
		/*for(j=0;j<ka;j++)
			if(min>mat[x][j])
			{
				min=mat[x][j];
				sh=mac[x][j];
				i=j;
			}
		s+=sh;
		x=j;
	}*/
	fprintf(g,"%d",s);
	fclose(f);
	fclose(g);
	return 0;
}