Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //#pragma (Ofast)
- #include <bits/stdc++.h>
- #include <cstdlib>
- #define pfor(i, n) for (int i = 0; i < (n); i++)
- #define rfor(i, n) for (int i = (n) - 1; i >= 0; i--)
- #define pb push_back
- #define fi first
- #define se second
- #define _USE_MATH_DEFINES
- #define gb(x, i) ((x >> i) & 1)
- using namespace std;
- typedef long long ll;
- ll INF = 1e18 + 3;
- pair <pair <ll, int>, ll> p[7000];
- ll d[3000];
- set <int> se;
- int main() {
- //freopen("maze.in", "r", stdin);
- //freopen("maze.out", "w", stdout);
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- int n, m, s;
- cin >> n >> m >> s;
- pfor(i, n + 1)
- d[i] = INF;
- pfor(i, m) {
- int x, y, z;
- cin >> x >> y >> z;
- p[i].fi.fi = x;
- p[i].fi.se = y;
- p[i].se = z;
- }
- d[s] = 0;
- pfor(j, n) {
- pfor(i, m) {
- if (d[p[i].fi.fi] < INF) {
- if (d[p[i].fi.se] > d[p[i].fi.fi] + p[i].se) {
- if (j == n - 1) {
- se.insert(p[i].fi.se);
- }
- d[p[i].fi.se] = d[p[i].fi.fi] + p[i].se;
- }
- //cout << p[i].fi.fi << " " << p[i].fi.se << " " << d[p[i].fi.se] << endl;
- }
- }
- }
- pfor(i, n) {
- if (d[i + 1] == INF)
- cout << "*\n";
- else {
- if (se.count(i + 1) == 1)
- cout << "-\n";
- else
- cout << d[i + 1] << "\n";
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement