Advertisement
Guest User

Untitled

a guest
Apr 13th, 2018
342
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1. # include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. typedef long double ld;
  7. typedef pair < int, int > pii;
  8. typedef unsigned long long ull;
  9.  
  10. const int N = (int)2e5 + 7;
  11. const int inf = (int)1e9 + 7;
  12.  
  13. int t;
  14. int n, m, f;
  15. int cost[15][15], d[(1 << 15)];
  16.  
  17. void solve(){
  18.   scanf("%d %d %d", &n, &m, &f);
  19.   for(int i = 0; i < (1 << n); ++i){
  20.     d[i] = inf;
  21.   }
  22.   for(int i = 0; i < n; ++i){
  23.     for(int j = 0; j < n; ++j){
  24.       cost[i][j] = -1;
  25.     }
  26.   }
  27.   for(int i = 0; i < m; ++i){
  28.     int x, y, z;
  29.     scanf("%d %d %d", &x, &y, &z);
  30.     --x, --y;
  31.     cost[x][y] = z;
  32.     cost[y][x] = z;
  33.   }
  34.   int mask = 0;
  35.   for(int i = 0; i < f; ++i){
  36.     int x;
  37.     scanf("%d", &x);
  38.     --x;
  39.     mask ^= (1 << x);
  40.   }
  41.   d[0] = 0;
  42.   for(int i = 0; i < n; ++i){
  43.     d[(1 << i)] = 0;
  44.   }
  45.   for(int i = 0; i < (1 << n); ++i){
  46.     for(int j = 0; j < n; ++j){
  47.       if((i >> j) & 1){
  48.         for(int k = 0; k < n; ++k){
  49.           if((i >> k) & 1){
  50.             continue;
  51.           }
  52.           if(cost[j][k] != -1){
  53.             d[i ^ (1 << k)] = min(d[i ^ (1 << k)], d[i] + cost[j][k]);
  54.           }
  55.         }
  56.       }
  57.     }
  58.   }
  59.   int ans = inf;
  60.   for(int i = 0; i < (1 << n); ++i){
  61.     if((mask & i) == mask){
  62.       ans = min(ans, d[i]);
  63.     }
  64.   }
  65.   printf("%d\n", ans);
  66. }
  67.  
  68. int main(){
  69.   scanf("%d", &t);
  70.   for(int i = 1; i <= t; ++i){
  71.     solve();
  72.   }
  73.   return 0;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement