Pagini recente » Cod sursa (job #993214) | Cod sursa (job #2703885)
#include <fstream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream f ("ubuntzei.in");
ofstream g ("ubuntzei.out");
int n, m, k;
long long rez = 2e9;
int c[2001][2001];
bool a[2001][2001];
const int inf = 0x3F3F3F3F;
vector < int > v;
int main()
{
f >> n >> m >> k;
for (int i=1; i<=k; i++)
{
int x; f >> x;
v.push_back(x);
}
memset(c, inf, sizeof(c));
for (int i=1; i<=n; i++)
c[i][i] = 0;
for (int i=1; i<=m; i++)
{
int x, y, z;
f >> x >> y >> z;
a[x][y] = a[y][x] = 1;
c[x][y] = c[y][x] = z;
}
for (int l=1; l<=n; l++)
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++) {
if (c[i][j] > c[i][l] + c[l][j])
c[i][j] = c[i][l] + c[l][j];
}
sort(v.begin(), v.end());
do
{
long long suma = c[1][v[0]] + c[v[v.size()-1]][n];
for (int i=0; i<v.size()-1; i++)
suma += c[v[i]][v[i+1]];
rez = min(rez, suma);
} while (next_permutation(v.begin(), v.end()));
if (k == 0) g << c[1][n];
else g << rez;
return 0;
}