Submission #948470

# Submission time Handle Problem Language Result Execution time Memory
948470 2024-03-18T06:43:56 Z kornkin Commuter Pass (JOI18_commuter_pass) C++17
0 / 100
2000 ms 50792 KB
#include<bits/stdc++.h>
using namespace std;
#define ll long long 

ll n, m, s, t, u, v, ans = 1e9, dis[100001];
vector<vector<pair<ll, ll>>> G(100001);
vector<int> E[100001], par[100001];
priority_queue<pair<ll, ll>, vector<pair<ll, ll>>, greater<pair<ll, ll>>> pq;
bool vis[100001];

void reset() { for(int i = 1; i <= n; i++) dis[i] = LLONG_MAX; }

void cal(vector<vector<pair<ll, ll>>> g){
    reset();
    
    pq.push({0, u});
    dis[u] = 0;
    while(!pq.empty()){
        ll now = pq.top().second;
        pq.pop();

        for(auto [e, w] : g[now]){
            if(dis[e] > dis[now] + w){
                dis[e] = dis[now] + w;
                pq.push({dis[e], e});
            }
        }
    }

    ans = min(ans, dis[v]);
}

void solve(int d){
    if(d == s) cal(G);
    else {
        for(auto &e : par[d]){
            G[d].push_back({e, 0});
            G[e].push_back({d, 0});
            solve(e);
            G[d].pop_back();
            G[e].pop_back();
        }
    }   
}

int main(){
    ios_base::sync_with_stdio(0);

    cin >> n >> m >> s >> t >> u >> v;
    for(ll i = 0; i < m; i++){
        ll u, v, w;
        cin >> u >> v >> w;
        G[u].push_back({v, w});
        G[v].push_back({u, w});

    }

    reset();

    pq.push({0, s});
    dis[s] = 0;
    while(!pq.empty()){
        ll now = pq.top().second;
        pq.pop();

        for(auto [e, w] : G[now]){
            if(dis[e] > dis[now] + w){
                dis[e] = dis[now] + w;
                pq.push({dis[e], e});
            }
        }
    }   

    pq.push({0, s});
    while(!pq.empty()){
        ll now = pq.top().second;
        pq.pop();   

        if(vis[now]) continue;
        vis[now] = 1;
        for(auto [e, w] : G[now]){
            if(dis[e] == dis[now] + w){
                par[e].push_back(now); 
                pq.push({dis[e], e});
            }
        }
    }  

    
    // for(int i = 1; i <= n; i++){
    //     cout << "i: " << i << '\n';
    //     for(auto &e : par[i]) cout << e << ' ';
    //     cout << '\n';
    // }
    
  
    solve(t);

    cout << ans;

    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 224 ms 32196 KB Output is correct
2 Execution timed out 2074 ms 37016 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 218 ms 41668 KB Output is correct
2 Correct 251 ms 42256 KB Output is correct
3 Correct 260 ms 41256 KB Output is correct
4 Correct 232 ms 42008 KB Output is correct
5 Correct 237 ms 43208 KB Output is correct
6 Correct 254 ms 47232 KB Output is correct
7 Correct 258 ms 50792 KB Output is correct
8 Correct 257 ms 42184 KB Output is correct
9 Correct 228 ms 43064 KB Output is correct
10 Correct 257 ms 41416 KB Output is correct
11 Incorrect 144 ms 36744 KB Output isn't correct
12 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 2091 ms 11864 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 224 ms 32196 KB Output is correct
2 Execution timed out 2074 ms 37016 KB Time limit exceeded
3 Halted 0 ms 0 KB -