Submission #673737

#TimeUsernameProblemLanguageResultExecution timeMemory
673737MilosMilutinovicOlympic Bus (JOI20_ho_t4)C++14
0 / 100
1087 ms2984 KiB
#include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #define per(i,a,n) for (int i=n-1;i>=a;i--) #define pb push_back #define eb emplace_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define fi first #define se second #define SZ(x) ((int)(x).size()) typedef vector<int> VI; typedef basic_string<int> BI; typedef long long ll; typedef pair<int,int> PII; typedef double db; mt19937 mrand(random_device{}()); const ll mod=1000000007; int rnd(int x) { return mrand() % x;} ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;} ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;} // head const int N=50500; const ll inf=1e18; int n,m,u[N],v[N],c[N],d[N]; ll dis[2][N]; vector<PII> e[N]; void dijkstra(int v,ll* d) { rep(i,1,n+1) d[i]=inf; d[v]=0; set<pair<ll,int>> st; st.insert({0,v}); while (SZ(st)) { auto it=st.begin(); int i=it->second; st.erase(it); for (auto& p:e[i]) { int j=p.fi,w=p.se; if (d[j]>d[i]+w) { if (d[j]!=inf) st.erase(st.find({d[j],j})); d[j]=d[i]+w; st.insert({d[j],j}); } } } } ll solve(int id) { rep(i,1,n+1) e[i].clear(); rep(i,0,m) { if (i==id) e[v[i]].pb({u[i],c[i]+d[i]}); else e[u[i]].pb({v[i],c[i]}); } dijkstra(1,dis[0]); dijkstra(n,dis[1]); return dis[0][n]+dis[1][1]; } int main() { scanf("%d%d",&n,&m); rep(i,0,m) { scanf("%d%d%d%d",u+i,v+i,c+i,d+i); e[u[i]].pb({v[i],c[i]}); } dijkstra(1,dis[0]); dijkstra(n,dis[1]); ll ans=dis[0][n]+dis[1][1]; rep(i,0,m) ans=min(ans,solve(i)); if (ans>=inf) ans=-1; printf("%lld",ans); }

Compilation message (stderr)

ho_t4.cpp: In function 'int main()':
ho_t4.cpp:63:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   63 |  scanf("%d%d",&n,&m);
      |  ~~~~~^~~~~~~~~~~~~~
ho_t4.cpp:65:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   65 |   scanf("%d%d%d%d",u+i,v+i,c+i,d+i);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...