Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- typedef pair < int, int > pii;
- typedef unsigned long long ull;
- const int N = (int)2e5 + 7;
- const int inf = (int)1e9 + 7;
- int t;
- int n, m, f;
- int cost[15][15], d[(1 << 15)];
- void solve(){
- scanf("%d %d %d", &n, &m, &f);
- for(int i = 0; i < (1 << n); ++i){
- d[i] = inf;
- }
- for(int i = 0; i < n; ++i){
- for(int j = 0; j < n; ++j){
- cost[i][j] = -1;
- }
- }
- for(int i = 0; i < m; ++i){
- int x, y, z;
- scanf("%d %d %d", &x, &y, &z);
- --x, --y;
- cost[x][y] = z;
- cost[y][x] = z;
- }
- int mask = 0;
- for(int i = 0; i < f; ++i){
- int x;
- scanf("%d", &x);
- --x;
- mask ^= (1 << x);
- }
- d[0] = 0;
- for(int i = 0; i < n; ++i){
- d[(1 << i)] = 0;
- }
- for(int i = 0; i < (1 << n); ++i){
- for(int j = 0; j < n; ++j){
- if((i >> j) & 1){
- for(int k = 0; k < n; ++k){
- if((i >> k) & 1){
- continue;
- }
- if(cost[j][k] != -1){
- d[i ^ (1 << k)] = min(d[i ^ (1 << k)], d[i] + cost[j][k]);
- }
- }
- }
- }
- }
- int ans = inf;
- for(int i = 0; i < (1 << n); ++i){
- if((mask & i) == mask){
- ans = min(ans, d[i]);
- }
- }
- printf("%d\n", ans);
- }
- int main(){
- scanf("%d", &t);
- for(int i = 1; i <= t; ++i){
- solve();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement