cp-library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub ma-tw/cp-library

:heavy_check_mark: test/dijkstra.test.cpp

Depends on

Code

#define PROBLEM "https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_A"
#include <bits/stdc++.h>
#include "../graph/dijkstra.hpp"
using namespace std;

int main() {
    int n, m, r;
    cin >> n >> m >> r;
    vector<vector<Edge>> g(n), inv(n);
    for (int i = 0; i < m; i++) {
        int a, b, c;
        cin >> a >> b >> c;
        g[a].push_back({b, c});
        inv[b].push_back({a, c});
    }
    vector<long long> dist = dijkstra(g, r);
    for (int i = 0; i < n; i++) {
        if (dist[i] == 1LL << 60) cout << "INF" << endl;
        else cout << dist[i] << endl;
    }
}
#line 1 "test/dijkstra.test.cpp"
#define PROBLEM "https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_A"
#include <bits/stdc++.h>
#line 3 "graph/dijkstra.hpp"
using namespace std;

struct Edge {
    int to, cost;
};

// 1LL << 60 if infty
vector<long long> dijkstra(vector<vector<Edge>> g, int s) {
    vector<long long> ret((int) g.size(), 1LL << 60);
    priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<pair<long long, int>>> q;
    q.push({0, s});
    ret[s] = 0;
    while (!q.empty()) {
        pair<long long, int> p = q.top(); q.pop();
        long long &dist = p.first;
        int &v = p.second;
        if (ret[v] < dist) continue;
        ret[v] = dist;
        for (Edge &e : g[v]) {
            if (ret[e.to] > dist + e.cost) {
                ret[e.to] = dist + e.cost;
                q.push({dist + e.cost, e.to});
            }
        }
    }
    return ret;
}
#line 4 "test/dijkstra.test.cpp"
using namespace std;

int main() {
    int n, m, r;
    cin >> n >> m >> r;
    vector<vector<Edge>> g(n), inv(n);
    for (int i = 0; i < m; i++) {
        int a, b, c;
        cin >> a >> b >> c;
        g[a].push_back({b, c});
        inv[b].push_back({a, c});
    }
    vector<long long> dist = dijkstra(g, r);
    for (int i = 0; i < n; i++) {
        if (dist[i] == 1LL << 60) cout << "INF" << endl;
        else cout << dist[i] << endl;
    }
}
Back to top page