Beingamanforever

Floyd Warshal 1, Josino Travel

Feb 7th, 2025
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.09 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. // #include <atcoder/all>
  3. using namespace std;
  4. #define int long long
  5. #define all(x) (x).begin(), (x).end()
  6. typedef vector<int> vi;
  7. typedef vector<vi> vvi;
  8. typedef vector<pair<int, int>> vpi;
  9. typedef pair<int, int> pi;
  10. #define f first
  11. #define s second
  12. #define pb push_back
  13. #define endl "\n"
  14. #define yes cout << "YES" << endl
  15. #define no cout << "NO" << endl
  16. int dx[] = {-1, 0, 1, 0};
  17. int dy[] = {0, 1, 0, -1};
  18. const int mod1 = 1e9 + 7, mod2 = 998244353, INF = 2e18, N = 2e5 + 5, L = 19;
  19. int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
  20. // -----------------------------------------------------------------------------
  21.  
  22. void solve()
  23. {
  24.     int n, m, k;
  25.     cin >> n >> m >> k;
  26.     vi r(k);
  27.     for (int i = 0; i < k; i++)
  28.     {
  29.         cin >> r[i];
  30.     }
  31.     vvi dist(n + 1, vi(n + 1, INF));
  32.     for (int i = 1; i <= n; i++)
  33.     {
  34.         dist[i][i] = 0;
  35.     }
  36.     for (int i = 0; i < m; i++)
  37.     {
  38.         int u, v, w;
  39.         cin >> u >> v >> w;
  40.         dist[u][v] = w;
  41.         dist[v][u] = w;
  42.     }
  43.     for (int k = 1; k <= n; k++)
  44.     {
  45.         for (int i = 1; i <= n; i++)
  46.         {
  47.             for (int j = 1; j <= n; j++)
  48.             {
  49.                 if (dist[i][k] < INF && dist[k][j] < INF)
  50.                 {
  51.                     dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
  52.                 }
  53.             }
  54.         }
  55.     }
  56.     // check for all permutations of r, store the best result
  57.     vi res;
  58.     int mini = INF;
  59.     sort(all(r));
  60.     function<void(vi &)> perm = [&](vi &r)
  61.     {
  62.         do
  63.         {
  64.             int ans = 0;
  65.             for (int i = 1; i < k; i++)
  66.             {
  67.                 ans += (dist[r[i - 1]][r[i]]);
  68.             }
  69.             mini = min(mini, ans);
  70.         } while (next_permutation(all(r)));
  71.     };
  72.     perm(r);
  73.     cout << mini << endl;
  74.     return;
  75. }
  76.  
  77. signed main()
  78. {
  79.     // __START__;
  80.     ios_base::sync_with_stdio(false);
  81.     cin.tie(NULL);
  82.     cout.tie(NULL);
  83.     int t = 1;
  84.     // cin >> t;
  85.     while (t--)
  86.     {
  87.         solve();
  88.     }
  89.     // __END__;
  90.     return 0;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment