This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
//#pragma GCC optimize("O3")
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define X first
#define Y second
int n;int m;
struct edg{
int x;int y;int cs;int ds;
}es[500005];
vector<int>e[5000];
int dis[5000];int vis[5000];
void dijkstera(int st){
for(int i=0;i<=n;i++){
dis[i]=1e17;vis[i]=0;
}
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>pq;
pq.push({0,st});
dis[st]=0;
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 id=e[nw][i];
int v=es[id].y;
if(vis[v]){continue;}
int cst=es[id].cs;
dis[v]=min(dis[v],dis[nw]+cst);
pq.push({dis[v],v});
}
}
}
int rdis[5010];
signed main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int a;int b;int c;int d;
cin>>a>>b>>c>>d;
es[i]={a,b,c,d};
e[a].push_back(i);
e[b].push_back(i);
}
int ans=1e17;
for(int id=0;id<=m;id++){
swap(es[id].x,es[id].y);
dijkstera(n);
for(int i=1;i<=n;i++){
rdis[i]=dis[i];
}
dijkstera(1);
swap(es[id].x,es[id].y);
ans=min(ans,dis[n]+rdis[1]+es[id].ds);
}
if(ans<1e17){
cout<<ans<<endl;
}else{
cout<<-1;
}
}
Compilation message (stderr)
ho_t4.cpp: In function 'void dijkstera(long long int)':
ho_t4.cpp:27:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
27 | for(int i=0;i<e[nw].size();i++){
| ~^~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |