Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int INF = 1e9;
- int main() {
- int n; cin >> n;
- vector<vector<vector<int>>> dist(2, vector<vector<int>>(n, vector<int>(n, INF)));
- for (int z = 0; z < 2; ++z) {
- int m; cin >> m;
- for (int i = 0; i < n; ++i)
- dist[z][i][i] = 0;
- for (int i = 0; i < m; ++i) {
- int u, v, l; cin >> u >> v >> l;
- dist[z][u][v] = dist[z][v][u] = l;
- }
- for (int k = 0; k < n; ++k)
- for (int i = 0; i < n; ++i)
- for (int j = 0; j < n; ++j)
- dist[z][i][j] = min(dist[z][i][j], dist[z][i][k] + dist[z][k][j]);
- }
- int k; cin >> k;
- vector<int> inter(k + 2, 0);
- for (int i = 1; i <= k; ++i)
- cin >> inter[i];
- k += 2;
- vector<vector<int>> dp(k, vector<int>(n, INF));
- dp[0][0] = 0;
- for (int i = 0; i + 1 < k; ++i)
- for (int j = 0; j < n; ++j) {
- if (dp[i][j] == INF) continue;
- int now = inter[i], nxt = inter[i + 1];
- for (int nj = 0; nj < n; ++nj) {
- int nd = dp[i][j] + (nj == j ? dist[1][now][nxt]
- : dist[1][now][j] + dist[0][j][nj] + dist[1][nj][nxt]);
- dp[i + 1][nj] = min(dp[i + 1][nj], nd);
- }
- }
- cout << dp[k - 1][0] << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement