Cod sursa(job #1366895)

Utilizator roxana_97Soare Roxana Florentina roxana_97 Data 1 martie 2015 14:33:25
Problema Ubuntzei Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>
#include <algorithm>
#define Nmax 209
#define oo 2000000000
using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");

int N,M,S,F,d[Nmax][Nmax],x,y,sol,dr[Nmax],K,c;



int main()
{
    f>>N>>M>>K;
    for(int i=1;i<=K;i++)
    {
        f>>dr[i];
    }
    for(int i=1;i<=M;++i)

        {
                f>>x>>y>>c;
                d[x][y]=d[y][x]=c;

        }
    for (int k=1; k<=N; k++)
        for (int i=1; i<=N; i++)
            for (int j=1; j<=N; j++)
                if (i!=j && d[i][k]>0 && d[k][j]>0 && (d[i][j]==0 || d[i][k]+d[k][j]<d[i][j]))
                {
                        d[i][j] = d[i][k]+d[k][j];
                }

    sort(dr+1, dr+1+K);
    sol = oo;
    do {
        int sol_partial=0;
        dr[0]=1;
        dr[K+1]=N;
        for (int i=0; i<=K; i++)
            sol_partial = sol_partial + d[dr[i]][dr[i+1]];
        if (sol_partial<sol) sol=sol_partial;

    }while(next_permutation(dr+1, dr+1+K));

    g<<sol<<'\n';
    f.close();g.close();
    return 0;
}