Submission #1248738

#TimeUsernameProblemLanguageResultExecution timeMemory
1248738CodeLakVNCommuter Pass (JOI18_commuter_pass)C++17
15 / 100
162 ms43628 KiB
#include <bits/stdc++.h>
using namespace std;

#define Task "PATHLIB"
#define ll long long
#define pb push_back
#define FOR(i, a, b) for (int i = (a); i <= (b); i++)
#define FOD(i, a, b) for (int i = (a); i >= (b); i--)
#define F first
#define S second

typedef pair<int, int> ii;
typedef pair<ll, int> li;

const int N = 2e5 + 6;
const int INF = 1e9;
const int MOD = 1e9 + 7;

template<class X, class Y>
    bool minimize(X &x, Y y) {
        if (x > y) {
            x = y;
            return true;
        } else return false;
    }

template<class X, class Y>
    bool maximize(X &x, Y y) {
        if (x < y) {
            x = y;
            return true;
        } else return false;
    }

int numNode, numEdge;
int startSchool, endSchool;
int startLibrary, endLibrary;
vector<ii> adj[N];
map<int, bool> isChange[N];
int trace[N];

ll dijkstra(int s, int e) {
    priority_queue<li, vector<li>, greater<li>> pq;
    pq.push({0, s});
    vector<ll> dist(numNode + 1, (ll)1e18);
    dist[s] = 0;
    trace[s] = -1;
    while (!pq.empty()) {
        int u = pq.top().S, du = pq.top().F;
        pq.pop();
        for (auto e : adj[u]) {
            int v = e.F, c = e.S;
            if (dist[v] > dist[u] + c) {
                dist[v] = dist[u] + c;
                pq.push({dist[v], v});
                trace[v] = u;
            }
        }
    }
    return dist[e];
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    if (fopen(Task".INP", "r")) {
        freopen(Task".INP", "r", stdin);
        freopen(Task".OUT", "w", stdout);
    }

    cin >> numNode >> numEdge;
    cin >> startSchool >> endSchool;
    cin >> startLibrary >> endLibrary;
    FOR(i, 1, numEdge) {
        int u, v, c;
        cin >> u >> v >> c;
        adj[u].push_back({v, c});
        adj[v].push_back({u, c});
    }

    ll cost = dijkstra(startSchool, endSchool);
    int node = endSchool;
    while (trace[node] != -1) {
        isChange[node][trace[node]] = isChange[trace[node]][node] = 1;
        node = trace[node];
    }

    FOR(u, 1, numNode)
        for (auto &e : adj[u]) {
            int v = e.F;
            if (isChange[u][v]) e.S = 0;
        }

    cout << dijkstra(startLibrary, endLibrary);

    return 0;
}

Compilation message (stderr)

commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:67:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   67 |         freopen(Task".INP", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:68:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   68 |         freopen(Task".OUT", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...