Cod sursa(job #2543121)

Utilizator victorzarzuZarzu Victor victorzarzu Data 10 februarie 2020 21:05:57
Problema Ubuntzei Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
int n,m,k,x,y,cost,ans = INFINITY;
vector<int> c;
int a[2001][2001];

void Read()
{
    f>>n>>m;
    f>>k;
    for(int i = 1;i <= k;++i)
    {
        f>>x;
        c.push_back(x);
    }
    for(int i = 1;i <= m;++i)
    {
        f>>x>>y>>cost;
        a[x][y] = a[y][x] = cost;
    }
    f.close();
}

void roy_floyd()
{
    for(int h = 1;h <= n;++h)
        for(int i = 1;i <= n;++i)
            for(int j = 1;j <= n;++j)
                if(a[i][h] && a[h][j] && (a[i][j] > a[i][h] + a[h][j] || !a[i][j]) && i != j)
                    a[i][j] = a[i][h] + a[h][j];
}

void Solve()
{
    do{
        int dist = a[1][c[0]];
        for(int i = 1;i < k - 1;++i)
            dist += a[c[i]][c[i + 1]];
        dist += a[c[k - 1]][n];
        if(dist < ans) ans = dist;
    }while(next_permutation(c.begin(),c.end()));
    g<<ans;
    g.close();
}

int main()
{
    Read();
    roy_floyd();
    Solve();
    return 0;
}