Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define int int64_t
- const int mod = 998244353;
- vector<bool> used;
- vector<vector<pair<int, int>>> g;
- vector<bool> neg_inf;
- void dfs(int v) {
- used[v] = true;
- neg_inf[v] = true;
- for (auto [to, len]: g[v]) {
- if (!used[to]) {
- dfs(to);
- }
- }
- }
- int32_t main() {
- ios_base::sync_with_stdio(false);
- cin.tie(0); cout.tie(0);
- int n, m;
- cin >> n >> m;
- g.resize(n);
- for (int i = 0; i < m; i++) {
- int a, b, c;
- cin >> a >> b >> c;
- a--; b--;
- g[a].push_back({b, c});
- g[b].push_back({a, c});
- }
- int st = 0;
- vector<int> d(n, 2e18);
- d[st] = 0;
- // dp(i)[v] = shortest path from st to v if the path contains no more than i edges
- for (int i = 0; i < n - 1; i++) {
- for (int v = 0; v < n; v++) {
- for (auto [to, len]: g[v]) {
- d[to] = min(d[to], d[v] + len);
- }
- }
- }
- neg_inf.assign(n, false);
- for (int v = 0; v < n; v++) {
- for (auto [to, len]: g[v]) {
- if (d[to] > d[v] + len) {
- neg_inf[to] = true;
- }
- }
- }
- used.assign(n, false);
- for (int i = 0; i < n; i++) {
- if (neg_inf[i] && !used[i]) {
- dfs(i);
- }
- }
- for (int i = 0; i < n; i++) {
- if (neg_inf[i]) {
- cout << "-inf ";
- } else {
- cout << d[i] << ' ';
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement