Submission #1275236

#TimeUsernameProblemLanguageResultExecution timeMemory
1275236almazCommuter Pass (JOI18_commuter_pass)C++20
15 / 100
568 ms43880 KiB
#include <bits/stdc++.h> using namespace std; #define int long long // #define endl '\n' #define ff first #define ss second #define pb push_back #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() #define ar array const int MOD = 1e9 + 7,INF = 1e18, N = 2e5 + 5; /* 5 2 1 2 2 2 3 2 3 4 2 4 5 2 */ void solve(){ int n , m; cin >> n >> m; int s , t , u , v; cin >> s >> t >> u >> v; vector <vector <pair<int,int>>> g(n + 1); for(int i = 0;i < m;i++){ int a , b , c; cin >> a >> b >> c; g[a].pb({b , c}); g[b].pb({a , c}); } map <pair<int,int> , int> mp; { set <pair<int,int>> q; q.insert({0 , s}); vector <int> cnt(n + 1, INF); cnt[s] = 0; vector <int> p(n + 1); p[s] = -1; while(!q.empty()){ int x = q.begin() -> ss; q.erase(q.begin()); for(auto [i , c] : g[x]){ if(cnt[i] > cnt[x] + c){ cnt[i] = cnt[x] + c; p[i] = x; q.insert({cnt[i] , i}); } } } // for(int i = 1;i <= n;i++){ // cout<<cnt[i]<<' '; // } // cout<<endl; // for(int i = 1;i <= n;i++){ // cout<<p[i]<<' '; // } // cout<<endl; vector <int> pr; while(p[t] != -1){ pr.pb(t); t = p[t]; if(t == 0){ break; } } pr.pb(s); for(int i = 0;i < (int)pr.size() - 1;i++){ mp[{pr[i] , pr[i + 1]}] = 1; mp[{pr[i + 1], pr[i]}] = 1; } } set <pair<int,int>> q; q.insert({0 , u}); vector <int> cnt(n + 1, INF); cnt[u] = 0; while(!q.empty()){ int x = q.begin() -> ss; q.erase(q.begin()); // cout<<x<<endl; for(auto [i , c] : g[x]){ int l = c; if(mp[{i , x}]){ l = 0; } if(cnt[i] > cnt[x] + l){ cnt[i] = cnt[x] + l; q.insert({cnt[i], i}); } } } cout<<cnt[v]<<endl; } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int ti = 1; while (ti--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...