제출 #1311620

#제출 시각아이디문제언어결과실행 시간메모리
1311620filip1111Commuter Pass (JOI18_commuter_pass)C++20
31 / 100
1041 ms54100 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = long long;
const int N = 1e5 + 99;
vector<pair<int,ll>>tab[N];
const ll inf = 1e18;
ll odl[N];

ll dijkstra(int a, int b, int n){
    for(int i = 0; i < n+ 9; ++i)odl[i] = inf;
    priority_queue<pair<ll,int>, vector<pair<ll,int>>, greater<pair<ll,int>>> pq;
    pq.push({0,a});
    while(!pq.empty()){
        auto[x,v] = pq.top();
        pq.pop();
        if(odl[v] <= x)continue;
        odl[v] = x;
        for(auto [u,y] : tab[v]){
            pq.push({x+y,u});
        }
    }
    return odl[b];
}
bool vis[N];
map<pair<int,int>,bool>M;

void dfs(int v, ll x){
    assert(odl[v] == x);
    if(x == 0)return;
    if(vis[v])return;
    vis[v] = 1;
    ll mini = inf;
    for(auto [u,y] : tab[v]){
        mini = min(mini, odl[u] + y);
    }
    for(auto [u, y] : tab[v]){
        if(mini == odl[u] + y){
            dfs(u,x - y);
            M[{u,v}]=1;
            // M[{v,u}]=1;
        }
    }
}
int main(){
    int n, m;
    cin >> n >> m;
    int S,T, U, V;
    cin >> S >> T >> U >> V;
    for(int i = 0; i < m; i++){
        int a, b, c;
        cin >> a >> b >> c;
        tab[a].push_back({b,c});
        tab[b].push_back({a,c});
    }
    ll oo = dijkstra(S,T,n);
    dfs(T,oo);
    for(int i = 1; i <= n; i++){
        for(auto &[v,x] : tab[i]){
            if(M[{i,v}])x = 0;
            else if(M[{v,i}]) x = inf / 1000 ;
        }
    }
    ll ooo = dijkstra(U,V,n);
     for(int i = 1; i <= n; i++){
        for(auto &[v,x] : tab[i]){
            if(M[{v,i}])x = 0;
            else if(M[{i,v}]) x = inf / 1000;
        }
    }
    ll oooo = dijkstra(U,V, n);
    assert(min(ooo,oooo) >= 0);
    cout << min(ooo,oooo) << endl;
    
} 
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...