Cod sursa(job #2292061)

Utilizator usureluflorianUsurelu Florian-Robert usureluflorian Data 28 noiembrie 2018 22:14:02
Problema Team Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f ("team.in");
ofstream g ("team.out");
const int nmax=5e2+3;
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;
    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<=n;++i)
    {
        for(int j=0;j<=n;++j)
        {
            for(int k=0;k<=p;++k) d[i][j][k]=-1;
            v[i][j]=1e9;
        }
    }
    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)
        {
            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;
    g<<dfs(1,p,0);
    return 0;
}