Cod sursa(job #1110842)

Utilizator thesvcoolmanLucian Bicsi thesvcoolman Data 18 februarie 2014 13:52:27
Problema Ubuntzei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<fstream>
#define K 16
#define N 2013
#define INF 2000000

using namespace std;
ifstream fin("ubuntzei.in");
ofstream fout("ubuntzei.out");

int c[N][N],t[K],n,m,k,p[K],sol[K],luat[K],ctot,cmin=INF;

void royfloyd()
{
    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                c[i][j]=min(c[i][j],c[i][k]+c[k][j]);
}

void init()
{
    fin>>n;
    int i,j,x,y;
    for(i=1;i<n;i++)
        for(j=i+1;j<=n;j++)
            c[i][j]=c[j][i]=INF;
    fin>>m>>k;
    for(i=1;i<=k;i++)
        fin>>t[i];
    for(i=1;i<=m;i++)
        fin>>x>>y,fin>>c[x][y];
}

void anal()
{
    int ctot=c[1][t[sol[1]]];
    for(int i=1;i<=k;i++)
        ctot+=c[t[sol[i-1]]][t[sol[i]]];
    cmin=min(cmin,ctot+c[t[sol[k]]][n]);
}

void bec(int p)
{
    if(p>k)
        anal();
    else for(int i=1;i<=k;i++)
        if(!luat[i])
        {
            luat[i]=1;
            sol[p]=i;
            bec(p+1);
            luat[i]=0;
        }
}

int main()
{

    init();
    royfloyd();
    bec(1);
    fout<<cmin;
    return 0;
}