aboutsummaryrefslogtreecommitdiff
path: root/Semestr 4/aisd/themis/BELLMAN.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Semestr 4/aisd/themis/BELLMAN.cpp')
-rw-r--r--Semestr 4/aisd/themis/BELLMAN.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/Semestr 4/aisd/themis/BELLMAN.cpp b/Semestr 4/aisd/themis/BELLMAN.cpp
new file mode 100644
index 0000000..5a65096
--- /dev/null
+++ b/Semestr 4/aisd/themis/BELLMAN.cpp
@@ -0,0 +1,55 @@
+#include <bits/stdc++.h>
+using namespace std;
+
+const int N = 503;
+int dist[N];
+vector<pair<int, pair<int, int>>> edges;
+int main()
+{
+ ios_base::sync_with_stdio(false);
+ cin.tie();
+ int n, m, s;
+ cin >> n >> m >> s;
+ for (int i = 0; i <= n; i++)
+ {
+ dist[i] = 2e9;
+ }
+ dist[s] = 0;
+ for (int i = 0; i < m; i++)
+ {
+ int u, v, w;
+ cin >> u >> v >> w;
+ edges.push_back({w, {u, v}});
+ // edges.push_back({w, {v, u}});
+ }
+
+ for (int i = 0; i < n + 1; i++)
+ {
+ for (auto e : edges)
+ {
+ int w = e.first;
+ int u = e.second.first;
+ int v = e.second.second;
+ if (dist[v] > dist[u] + w)
+ {
+ dist[v] = dist[u] + w;
+ }
+ }
+ }
+ for (auto e : edges)
+ {
+ int w = e.first;
+ int u = e.second.first;
+ int v = e.second.second;
+ if (dist[v] > dist[u] + w)
+ {
+ cout << "NIE\n";
+ return 0;
+ }
+ }
+ for (int i = 0; i < n; i++)
+ {
+ if (i != s && dist[i] < 1e9)
+ cout << i << " " << dist[i] << "\n";
+ }
+} \ No newline at end of file