Submission #747128

#TimeUsernameProblemLanguageResultExecution timeMemory
7471281075508020060209tcOlympic Bus (JOI20_ho_t4)C++14
100 / 100
923 ms5016 KiB
#include <bits/stdc++.h> using namespace std; int n;int m; int uar[50010];int var[50010];long long war[50010];long long dar[50010]; long long dis[210]; long long rdis[210]; int vis[210]; long long odis[210]; long long ordis[210]; vector<pair<int,long long>>e[210]; long long dijkstera(){ for(int i=1;i<=n;i++){ dis[i]=1e18; vis[i]=0; rdis[i]=1e18; e[i].clear(); } for(int i=1;i<=m;i++){ e[uar[i]].push_back({var[i],war[i]}); } priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>pq; dis[1]=0; pq.push({0,1}); while(pq.size()){ int nw=pq.top().second; pq.pop(); if(vis[nw]){continue;} vis[nw]=1; for(int i=0;i<e[nw].size();i++){ int v=e[nw][i].first; long long w=e[nw][i].second; if(dis[v]>dis[nw]+w){ dis[v]=dis[nw]+w; pq.push({dis[v],v}); } } } rdis[n]=0; pq.push({0,n}); while(pq.size()){ int nw=pq.top().second; pq.pop(); if(vis[nw]==2){continue;} vis[nw]=2; for(int i=0;i<e[nw].size();i++){ int v=e[nw][i].first; long long w=e[nw][i].second; if(rdis[v]>rdis[nw]+w){ rdis[v]=rdis[nw]+w; pq.push({rdis[v],v}); } } } return dis[n]+rdis[1]; } vector<int>ee[210]; vector<int>er[210]; long long dis1[210];int frm[210]; long long rdis1[210];int frmn[210]; long long disn[210]; long long rdisn[210]; long long fdis[210][210]; int isin[50010]; signed main() { cin.tie(0); ios_base::sync_with_stdio(0); cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ fdis[i][j]=1e18; } fdis[i][i]=0; } for(int i=1;i<=m;i++){ cin>>uar[i]>>var[i]>>war[i]>>dar[i]; ee[uar[i]].push_back(i); er[var[i]].push_back(i); fdis[uar[i]][var[i]]=min(fdis[uar[i]][var[i]],war[i]); } for(int i=1;i<=n;i++){ dis1[i]=1e18; rdis1[i]=1e18; disn[i]=1e18; rdisn[i]=1e18; } priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>pq; dis1[1]=0; pq.push({0,1}); while(pq.size()){ int nw=pq.top().second; pq.pop(); if(vis[nw]){continue;} vis[nw]=1; for(int i=0;i<ee[nw].size();i++){ int id=ee[nw][i]; int v=var[id];int w=war[id]; if(dis1[v]>dis1[nw]+w){ dis1[v]=dis1[nw]+w; frm[v]=id; pq.push({dis1[v],v}); } } } for(int i=1;i<=n;i++){ vis[i]=0; } disn[n]=0; pq.push({0,n}); while(pq.size()){ int nw=pq.top().second; pq.pop(); if(vis[nw]){continue;} vis[nw]=1; for(int i=0;i<ee[nw].size();i++){ int id=ee[nw][i]; int v=var[id];int w=war[id]; if(disn[v]>disn[nw]+w){ disn[v]=disn[nw]+w; frmn[v]=id; pq.push({disn[v],v}); } } } for(int i=1;i<=n;i++){ for(int a=1;a<=n;a++){ for(int b=1;b<=n;b++){ fdis[a][b]=min(fdis[a][b],fdis[a][i]+fdis[i][b]); } } } if(dis1[n]<1e18){ int nw=n; while(nw!=1){ int id=frm[nw]; isin[id]=1; nw=uar[id]; } } if(disn[1]<1e18){ int nw=1; while(nw!=n){ int id=frmn[nw]; isin[id]=1; nw=uar[id]; } } long long ans=dijkstera(); //cout<<"hihi\n"; for(int i=1;i<=m;i++){ // cout<<i<<" "; if(isin[i]){ swap(uar[i],var[i]); ans=min(ans,dijkstera()+dar[i]); swap(uar[i],var[i]); }else{ // continue; int a=uar[i];int b=var[i]; long long cal=min(dis1[n],fdis[1][b]+war[i]+fdis[a][n] )+fdis[n][b]+fdis[a][1]+war[i]; cal=min(cal,min(disn[1],fdis[n][b]+war[i]+fdis[a][1])+fdis[1][b]+fdis[a][n]+war[i] ); ans=min(ans,cal+dar[i]); } //} // cout<<ans<<endl; } if(ans>=1e18){ans=-1;} cout<<ans<<endl; }

Compilation message (stderr)

ho_t4.cpp: In function 'long long int dijkstera()':
ho_t4.cpp:31:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |     for(int i=0;i<e[nw].size();i++){
      |                 ~^~~~~~~~~~~~~
ho_t4.cpp:49:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   49 |     for(int i=0;i<e[nw].size();i++){
      |                 ~^~~~~~~~~~~~~
ho_t4.cpp: In function 'int main()':
ho_t4.cpp:106:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  106 |         for(int i=0;i<ee[nw].size();i++){
      |                     ~^~~~~~~~~~~~~~
ho_t4.cpp:126:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  126 |         for(int i=0;i<ee[nw].size();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...