Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ∧_∧
- ( ・ω・。)つ━☆・*。
- ⊂ ノ ・゜
- しーJ Accepted
- */
- // #pragma GCC optimize("O3")
- // #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
- #include <bits/stdc++.h>
- #include <ext/pb_ds/assoc_container.hpp>
- #include <ext/pb_ds/tree_policy.hpp>
- #define ll long long
- #define all(x) begin(x), end(x)
- #define x first
- #define y second
- #define int long long
- using namespace std;
- using namespace __gnu_pbds;
- typedef long double ld;
- template<typename T>
- using kawaii_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
- const ld PI = atan2(0, -1);
- void seriy() {
- ios::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- cout << fixed << setprecision(14);
- #ifdef _offline
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- }
- const int MAXN = 1e6 + 10;
- const int MAXM = 600;
- const int INF = 1e18;
- const int BASE = 47;
- const int MOD = 1e9 + 7;
- const int MAXLOG = 21;
- vector<vector<pair<int, int>>> g;
- vector<int> gas, isgas;
- void dijkstra(int a, vector<int> &d) {
- fill(all(d), INF);
- d[a] = 0;
- set<pair<int, int>> st;
- st.insert({0, a});
- while(st.size()) {
- int u = st.begin()->y;
- st.erase(st.begin());
- for(auto v : g[u]) {
- if(d[u] + v.y < d[v.x]) {
- st.erase({d[v.x], v.x});
- d[v.x] = d[u] + v.y;
- st.insert({d[v.x], v.x});
- }
- }
- }
- }
- signed main() {
- seriy();
- int k, n, m, st, en;
- cin >> k >> n >> m >> st >> en;
- g.resize(n);
- isgas.resize(n);
- for(int i = 0; i < m; i++) {
- int u, v, w;
- cin >> u >> v >> w;
- u--;
- v--;
- g[u].push_back({v, w});
- g[v].push_back({u, w});
- }
- int l;
- cin >> l;
- gas.resize(l);
- for(int i = 0; i < l; i++) {
- cin >> gas[i];
- gas[i]--;
- isgas[gas[i]] = 1;
- }
- vector<int> ds(n), de(n);
- dijkstra(st, ds);
- dijkstra(en, de);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement