Submission #1192038

#TimeUsernameProblemLanguageResultExecution timeMemory
1192038jbn8Commuter Pass (JOI18_commuter_pass)C++20
0 / 100
0 ms320 KiB
#include <iostream> #include <vector> #include <map> #include <queue> #include <functional> using namespace std; #define int long long int N, M; int S, T; int U, V; vector<map<int, int>> G; class Node{ public: int cost, node, from; const bool operator>(const Node& o) const{ return cost > o.cost; } const bool operator>=(const Node& o) const{ return cost >= o.cost; } const bool operator<=(const Node& o) const{ return cost <= o.cost; } const bool operator<(const Node& o) const{ return cost < o.cost; } }; vector<bool> is_in_solut(vector<vector<int>> G, int node){ vector<bool> visited(N); function<void(int)> dfs; dfs = [&](int node){ if(visited[node])return; visited[node] = true; for(int next_node:G[node]){ if(!visited[next_node]) dfs(next_node); } }; dfs(node); return visited; } signed main(){ cin >> N >> M; cin >> S >> T; cin >> U >> V; for(int i=0; i<M; i++){ int node0, node1, cost; cin >> node0 >> node1 >> cost; G[node0][node1] = cost; } priority_queue<Node> Q; vector<int> S_T(N); vector<vector<int>> S_Tfrom(N); Q.push({0, S, -1}); while(!Q.empty()){ Node cur=Q.top(); Q.pop(); if(S_T[cur.node] != -1){ if(S_T[cur.node] == cur.cost) S_Tfrom[cur.node].push_back(cur.from); continue; } if(cur.node == T)break; S_T[cur.node] = cur.cost; S_Tfrom[cur.node].push_back(cur.from); for(auto A:G[cur.node]){ if(S_T[A.first] == -1) Q.push({cur.cost+A.second, A.first, cur.node}); } } vector<bool> is_good = is_in_solut(S_Tfrom, T); Q = priority_queue<Node>(); vector<int> U_V(N); Q.push({0, V, -1}); while(!Q.empty()){ Node cur=Q.top(); Q.pop(); if(U_V[cur.node] != -1) continue; if(is_good[cur.node]){ cout << cur.cost << '\n'; return 0; } U_V[cur.node] = cur.cost; for(auto A:G[cur.node]){ if(U_V[A.first] == -1) Q.push({cur.cost+A.second, A.first, cur.node}); } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...