제출 #1063076

#제출 시각아이디문제언어결과실행 시간메모리
1063076_8_8_Olympic Bus (JOI20_ho_t4)C++17
5 / 100
1033 ms8436 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e5 + 12, MOD = (int)1e9 + 7; #define int ll const ll inf = 1e16; int n,m; int U[N],V[N],C[N],D[N]; void dijkstra(int ver,vector<ll> &d,vector<int> &pr) { d.resize(n); pr.resize(n); for(int i = 0;i < n;i++) { d[i] = inf; } d[ver] = 0; vector<int> vis(n,0); vector<vector<int>> g;g.resize(n); for(int i = 0;i < m;++i) { g[U[i]].push_back(i); } for(int i = 0;i < n;i++) { int v = -1; for(int j = 0;j < n;j++) { if(vis[j]) continue; if(v == -1 || d[j] < d[v]) { v = j; } } vis[v] = 1; for(int t:g[v]) { int to = V[t],w = C[t]; if(d[to] > d[v] + w) { d[to] = d[v] + w; pr[to] = t; } } } } vector<ll> d[N]; vector<int> p[N]; ll res = inf; bool in[N]; void test() { cin >> n >> m; for(int i = 0;i < m;i++) { cin >> U[i] >> V[i] >> C[i] >> D[i]; U[i]--;V[i]--; } for(int i = 0;i < n;++i) { dijkstra(i,d[i],p[i]); } res = d[0][n-1] + d[n - 1][0]; vector<ll> bfd; vector<int> bfp; // for(int j = 0;j < m;j++) { // in[j] = 1; // swap(V[j],U[j]); // ll nv = D[j]; // dijkstra(0,bfd,bfp); // nv += bfd[n - 1]; // dijkstra(n - 1,bfd,bfp); // nv += bfd[0]; // res = min(res,nv); // swap(V[j],U[j]); // } auto make = [&](int x,int y,vector<int> &pr){ while(x != y) { int j = pr[x]; in[j] = 1; swap(V[j],U[j]); ll nv = D[j]; dijkstra(0,bfd,bfp); nv += bfd[n - 1]; dijkstra(n - 1,bfd,bfp); nv += bfd[0]; res = min(res,nv); swap(V[j],U[j]); x = U[j]; } }; if(d[0][n - 1] != inf) make(n - 1,0,p[0]); if(d[n - 1][0] != inf) make(0,n - 1,p[n - 1]); for(int j = 0;j < m;j++) { if(in[j]) continue; swap(V[j],U[j]); ll nv = D[j]; dijkstra(0,bfd,bfp); nv += bfd[n - 1]; dijkstra(n - 1,bfd,bfp); nv += bfd[0]; res = min(res,nv); swap(V[j],U[j]); } if(res >= inf) res = -1; cout << res << '\n'; } signed main() { ios_base::sync_with_stdio(false);cin.tie(0); int t = 1; // cin >> t; while(t--) { test(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...