Submission #811884

#TimeUsernameProblemLanguageResultExecution timeMemory
811884vjudge1Olympic Bus (JOI20_ho_t4)C++14
5 / 100
109 ms2844 KiB
#include<bits/stdc++.h> #define fi first #define se second #define ll long long using namespace std ; const ll N = 200, M = 5e4 ; ll n, m, from[M + 1], to[M + 1], c[M + 1], d[M + 1] ; set<pair<ll, ll>> v[N + 1] ; ll deikstra(ll city, ll abu) { ll dist[N + 1] ; set<pair<ll, ll>> s ; for(ll i = 1 ; i <= N ; i++) dist[i] = 1e15 ; dist[city] = 0 ; s.insert({0, city}) ; while(s.size()) { pair<ll, ll> p = *s.begin() ; s.erase(p) ; // cout << p.fi << ' ' << p.se << '\n' ; if(p.fi > dist[p.se]) continue ; for(auto i : v[p.se]) { if(dist[i.fi] > p.fi + i.se) { // cout<<p.se<<"->"<<i.fi<<'\n'; dist[i.fi] = p.fi + i.se ; s.insert({dist[i.fi], i.fi}) ; } } } return dist[abu] ; } signed main() { ios_base::sync_with_stdio( 0 ) ; cin.tie( 0 ) ; cout.tie( 0 ) ; cin >> n >> m ; for(ll i = 1 ; i <= m ; i++) cin >> from[i] >> to[i] >> c[i] >> d[i] ; if(m <= 1000) { ll ans ; for(ll i = 1 ; i <= m ; i++) v[from[i]].insert({to[i], c[i]}) ; ans = deikstra(1, n) + deikstra(n, 1) ; for(ll i = 1 ; i <= m ; i++) { ll now = d[i] ; v[from[i]].erase({to[i], c[i]}) ; v[to[i]].insert({from[i], c[i]}) ; now += deikstra(1, n) ; now += deikstra(n, 1) ; ans = min(ans, now) ; // cout << "___________________\n" ; v[to[i]].erase({from[i], c[i]}) ; v[from[i]].insert({to[i], c[i]}) ; } if(ans >= 1e15) ans = -1 ; cout << ans ; return 0 ; } return 0 ; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...