Submission #702604

#TimeUsernameProblemLanguageResultExecution timeMemory
702604guagua0407Olympic Bus (JOI20_ho_t4)C++17
0 / 100
1052 ms4084 KiB
#include<bits/stdc++.h>
using namespace std;
#define f first
#define s second
#define ll long long
#define all(x) x.begin(),x.end()

struct edge{
    int a,b,c,d;
};

const int mxn=205;
multiset<pair<int,int>> adj[mxn]; 
ll dp[mxn]; 

ll dijkstra(int st,int en){
    memset(dp,0x3f3f3f3f,sizeof(dp));
    dp[st]=0;
    priority_queue<pair<ll,int>,vector<pair<ll,int>>,greater<pair<ll,int>>> pq;
    pq.push({0,st});
    while(!pq.empty()){
        ll dist;
        int v;
        dist=pq.top().f;
        v=pq.top().s;
        pq.pop();
        if(dist!=dp[v]) continue;
        for(auto u:adj[v]){
            ll fin=dp[v]+u.s;
            if(fin<dp[u.f]){
                dp[u.f]=fin;
                pq.push({dp[u.f],u.f});
            }
        }
    }
    return dp[en];
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int n,m;
    cin>>n>>m;
    vector<edge> E(m);
    for(int i=0;i<m;i++){
        int a,b,c,d;
        cin>>a>>b>>c>>d;
        E[i]={a,b,c,d};
        adj[a].insert({b,c});
    }
    ll ans=1e18;
    for(auto v:E){
        int a,b,c,d;
        a=v.a,b=v.b,c=v.c,d=v.d;
        adj[a].erase(adj[a].find({b,c}));
        adj[b].insert({a,c});
        ans=min(ans,d+dijkstra(1,n)+dijkstra(n,1));
        adj[a].insert({b,c});
        adj[b].erase(adj[b].find({a,c}));
    }
    cout<<ans;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...