Pagini recente » Cod sursa (job #754188) | Cod sursa (job #1322504) | Cod sursa (job #1560282) | Cod sursa (job #2462692) | Cod sursa (job #692926)
Cod sursa(job #692926)
#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 && mat[x][ck[i][0]]!=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;
}