Submission #510067

#TimeUsernameProblemLanguageResultExecution timeMemory
510067CSQ31Olympic Bus (JOI20_ho_t4)C++17
5 / 100
1063 ms3980 KiB
#include <bits/stdc++.h> using namespace std; typedef long long int ll; const int MAXN = 5e4+5; const ll INF = 1e18; #define sz(a) (int)(a.size()) ll c[MAXN],d[MAXN],dist[MAXN]; int n,m; array<int,2>par[201]; vector<array<int,2>>g[201],gr[201]; bool block[MAXN],vis[201]; void djikstra(int v,vector<array<int,2>>*g){ for(int i=1;i<=n;i++)dist[i] = INF,vis[i] = 0; dist[v] = 0; while(true){ int u = 0; for(int i=1;i<=n;i++)if(dist[i] < dist[u] && !vis[i])u = i; if(!u)break; vis[u] = 1; for(auto x:g[u]){ if(block[x[1]])continue; if(dist[u] + c[x[1]] < dist[x[0]]){ dist[x[0]] = dist[u] + c[x[1]]; par[x[0]] = {u,x[1]}; } } } } ll odist[2][201]; //ori graph ll rdist[2][201]; //reverse graph vector<int>path[2]; vector<int>cut[2]; int main() { cin>>n>>m; dist[0] = INF; vector<array<int,2>>edge; for(int i=0;i<m;i++){ int v,u; cin>>v>>u>>c[i]>>d[i]; g[v].push_back({u,i}); gr[u].push_back({v,i}); edge.push_back({v,u}); } /* djikstra(1,g); for(int i=1;i<=n;i++)odist[0][i] = dist[i]; if(dist[n] != INF){ int cur = n; while(cur!=1){ path[0].push_back(par[cur][1]); cur = par[cur][0]; } reverse(path[0].begin(),path[0].end()); cut[0].resize(sz(path[0])); for(int i=0;i<sz(path[0]);i++){ int x = path[0][i]; block[x] = 1; djikstra(1,g); cut[0][x] = dist[n]; } }*/ ll ans = INF; for(int i=0;i<=m;i++){ if(i!=m){ block[i] = 1; c[m+1] = c[i]; g[edge[i][1]].push_back({edge[i][0],m+1}); } ll cost = d[i]; djikstra(1,g); cost+=dist[n]; djikstra(n,g); cost+=dist[1]; ans = min(ans,cost); if(i!=m){ g[edge[i][1]].pop_back(); block[i] = 0; } } if(ans == INF)ans = -1; cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...