Pagini recente » Cod sursa (job #2100768) | Cod sursa (job #604329) | Cod sursa (job #1937664) | Cod sursa (job #2041353) | Cod sursa (job #868447)
Cod sursa(job #868447)
#include<fstream>
#include<vector>
#include <bitset>
#include <cassert>
#include <memory.h>
#include <algorithm>
#define dim 205
using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
int A[dim][dim];
int i,j,k,K,a,b,c,n,m,MIN;
vector<int>v;
inline int min(int a,int b){
if(a<b)
return a;
return b;
}
int main () {
f>>n>>m;
f>>K;
for(i=1;i<=K;++i){
f>>a;
v.push_back(a);
}
for(i=1;i<=m;++i){
f>>a>>b>>c;
A[a][b]=A[b][a]=c;
}
MIN=100000;
for(k=1;k<=n;++k){
for(i=1;i<=n;++i) {
for(j=1;j<=n;++j){
if(i!=j && A[i][k] && A[k][j]) {
if(!A[i][j] || A[i][j]>A[i][k]+A[k][j])
A[i][j]=A[i][k]+A[k][j];
}
}
}
}
if(K){sort(v.begin(),v.end());
do {
int ans=A[1][v.front()] + A[v.back()][n];
for (int i=0;i<v.size()-1;++i)
ans+= A[v[i]][v[i + 1]];
MIN=min(MIN,ans);
}while (next_permutation(v.begin(),v.end()));
}
if(K)
g<<MIN<<"\n";
else
g<<A[1][n]<<"\n";
return 0;
}