Pagini recente » Cod sursa (job #112123) | Cod sursa (job #477811) | Cod sursa (job #37217) | Cod sursa (job #3253036) | Cod sursa (job #2292102)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("team.in");
ofstream g ("team.out");
const int nmax=513;
int t[nmax],d[nmax/10][nmax/10][nmax/10],v[nmax][nmax],p,n,m,a,b,c;
int dfs(int st,int dr,int nod)
{
if(d[st][dr][nod]!=-1) return d[st][dr][nod];
if(st>=dr) return 0;
if(st==dr) return v[t[nod]][t[st]];
int sol=2e9;
for(int i=st;i<=dr;++i)
{
sol=min(sol,dfs(st,i-1,i)+dfs(i+1,dr,i)+v[t[nod]][t[i]]);
}
d[st][dr][nod]=sol;
return sol;
}
int main()
{
ios::sync_with_stdio(false);
f>>p>>n>>m;
for(int i=0;i<=p;++i)
{
for(int j=0;j<=p;++j)
{
for(int k=0;k<=p;++k) d[i][j][k]=-1;
}
}
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j) v[i][j]=1e9;
v[i][i]=0;
}
for(int i=1;i<=m;++i)
{
f>>a>>b>>c;
v[a][b]=v[b][a]=c;
}
for(int i=1;i<=p;++i) f>>t[i];
// for(int k=1;k<=n;++k)
// {
// for(int i=1;i<n;++i)
// {
// v[i][i]=0;
// for(int j=i+1;j<=n;++j)
// {
// if(v[i][k]+v[k][j]<v[i][j]) v[i][j]=v[i][k]+v[k][j];
// }
// }
// }
t[0]=1;
cout<<v[1][2];
g<<dfs(1,p,0);
return 0;
}