제출 #1342156

#제출 시각아이디문제언어결과실행 시간메모리
1342156light2901Commuter Pass (JOI18_commuter_pass)C++17
31 / 100
213 ms33892 KiB
#include <bits/stdc++.h>
#define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; ++i)
#define FORD(i, b, a) for (int i = (b), _a = (a); i >= _a; --i)
#define ALL(x) x.begin(), x.end()
#define RALL(x) x.rbegin(), x.rend()
#define el cout<<"\n";
#define ii pair<int, int>
#define fi first
#define se second
#define int long long
using namespace std;
const int MAXN = 1e5 + 5;
const int INF = 1e18;
int n, m, S, T, U, V, ans, ds[MAXN], dt[MAXN], du[MAXN], dv[MAXN], vis[MAXN];
ii mi[MAXN];
vector<ii> g[MAXN];
vector<int> adj[MAXN];
vector<pair<ii, int>> canh;
void djk(int st, int d[]) {
    FOR(i, 1, n) d[i] = INF;
    d[st] = 0;
    priority_queue<ii, vector<ii>, greater<ii>> p;
    p.push({0, st});
    while(p.size()) {
        auto x = p.top(); p.pop();
        if(d[x.se] < x.fi) continue;
        for(auto v : g[x.se]) {
            if(d[v.fi] > x.fi + v.se) {
                d[v.fi] = x.fi + v.se;
                p.push({d[v.fi], v.fi});
            }
        }
    }
}
void dfs(int u) {
    vis[u] = 1;
    mi[u] = {du[u], dv[u]};
    for(auto v : adj[u]) if(!vis[v]) {
        dfs(v);
        mi[u].fi = min(mi[u].fi, mi[v].fi);
        mi[u].se = min(mi[u].se, mi[v].se);
    }
    ans = min({ans, du[u] + mi[u].se, mi[u].fi + dv[u]});
}
main(void) {
    ios_base::sync_with_stdio(0); 
    cin.tie(0); cout.tie(0);
    cin >> n >> m >> S >> T >> U >> V;
    FOR(i, 1, m) {
        int x, y, w; cin >> x >> y >> w;
        g[x].push_back({y, w});
        g[y].push_back({x, w});
        canh.push_back({{x, y}, w});
    }
    djk(S, ds);
    djk(T, dt);
    djk(U, du);
    djk(V, dv);
    for(auto tem : canh) {
        int x = tem.fi.fi, y = tem.fi.se, w = tem.se;
        if(ds[x] + dt[y] + w == ds[T]) {
            adj[x].push_back(y);
        }else if(ds[y] + dt[x] + w == ds[T]) {
            adj[y].push_back(x);
        }
    }
    ans = du[V];
    dfs(S);
    cout << ans;
    return 0;
}
// T.T<33~~

컴파일 시 표준 에러 (stderr) 메시지

commuter_pass.cpp:45:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   45 | main(void) {
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...