Submission #888201

# Submission time Handle Problem Language Result Execution time Memory
888201 2023-12-16T10:46:10 Z Unforgettablepl Olympic Bus (JOI20_ho_t4) C++17
0 / 100
2 ms 604 KB
#include <bits/stdc++.h>
using namespace std;

#define int long long
const int INF = 1e15;

struct edge{
    int first,second,d;
    edge(int f,int s,int c):first(f),second(s),d(c){}
};

vector<edge> adj[5];
bool visited[5];
int n;

struct comp{
    bool operator()(pair<int,int> a,pair<int,int> b){
        return a.second==b.second ? a.first>b.first : a.second>b.second;
    }
};

int dijkastra(){
    priority_queue<pair<int,int>,vector<pair<int,int>>,comp> q;
    int c = INF;
    for(int i=1;i<=n;i++)visited[i]=false;
    q.emplace(1,0);
    while(!q.empty()){
        auto curr = q.top();q.pop();
        if(visited[curr.first])continue;
        visited[curr.first]=true;
        if(curr.first==n){
            c = curr.second;
            break;
        }
        for(auto&x:adj[curr.first])if(!visited[x.first])q.emplace(x.first,x.second+curr.second);
    }
    if(!visited[n])return INF;
    for(int i=1;i<=n;i++)visited[i]=false;
    q.emplace(n,0);
    while(!q.empty()){
        auto curr = q.top();q.pop();
        if(visited[curr.first])continue;
        visited[curr.first]=true;
        if(curr.first==1){
            c += curr.second;
            break;
        }
        for(auto&x:adj[curr.first])if(!visited[x.first])q.emplace(x.first,x.second+curr.second);
    }
    if(!visited[1])return INF;
    return c;
}

int32_t main(){
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    int m;
    cin >> n >> m;
    for (int i = 1; i <= m; i++) {
        int a,b,c,d;cin>>a>>b>>c>>d;
        adj[a].emplace_back(b,c,d);
    }
    for(int i=1;i<=n;i++)adj[i].emplace_back(i,INF,INF);
    int ans = dijkastra();
    for(int i=1;i<=n;i++){
        for(auto&x:adj[i]){
            if(x.d==INF)continue;
            adj[x.first].back() = edge(i,x.second,x.d);
            x.second=INF;
            ans = min(ans,dijkastra()+x.d);
            x.second=adj[x.first].back().second;
            adj[x.first].back()=edge(x.first,INF,INF);
        }
    }
    cout << (ans>=INF ? -1 : ans) << '\n';
}
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 348 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 600 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 2 ms 604 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 348 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -