Pagini recente » Cod sursa (job #2460528) | Cod sursa (job #2009610) | Cod sursa (job #1853348) | Cod sursa (job #2978673) | Cod sursa (job #1356658)
#include <fstream>
#include <vector>
#define INF 0x3f3f3f3f
using namespace std;
ifstream is("ubuntzei.in");
ofstream os("ubuntzei.out");
int n, m, k;
vector<int> ub;
vector<vector<vector<int> > > c;
void Read();
void Solve();
int main()
{
Read();
Solve();
is.close();
os.close();
return 0;
}
void Solve()
{
for ( int i = 1; i <= n; ++i )
c[i][i][(1 << ub[i]) | 1] = 0;
for ( int k = 1; k <= n; ++k )
for ( int i = 1; i <= n; ++i )
for ( int j = 1; j <= n; ++j )
{
if ( i == j )
continue;
for ( int mi = 1; mi < ( 1 << (k + 1) ); mi += 2)
if ( mi & (1<<ub[i]) )
for ( int mj = 1; mj < ( 1 << (k + 1) ); mj += 2 )
if ( mj & (1<<ub[j]) )
// {
c[i][j][mi | mj] = min(c[i][j][mi | mj], c[i][k][mi] + c[k][j][mj]);
// os << c[i][j][mi | mj] << "\n";}
}
os << c[1][n][(1 << (k + 1)) - 1] << "\n";
}
void Read()
{
is >> n >> m >> k;
ub = vector<int>(n + 1);
int n1, n2, cost;
for ( int i = 1; i <= k; ++i )
{
is >> n1;
ub[n1] = i;
}
c = vector<vector<vector<int> > >(n + 1, vector<vector<int> >(n + 1, vector<int>(1 << 17, INF)));
for ( int i = 1; i <= m; ++i )
{
is >> n1 >> n2 >> cost;
c[n1][n2][(1 << ub[n1]) | (1 << ub[n2]) | 1] = c[n2][n1][(1 << ub[n1]) | (1 << ub[n2]) | 1] = cost;
}
}