Pagini recente » Cod sursa (job #1554296) | Cod sursa (job #1549855) | Cod sursa (job #3213021) | Cod sursa (job #1766723) | Cod sursa (job #3213476)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
const int kInf = 1e9;
vector<int> bf(int s, const vector<vector<pair<int, int>>> &adj) {
int n = adj.size();
vector<int> dist(n, kInf), frq(n);
vector<bool> inQ(n);
queue<int> q;
dist[s] = 0;
q.emplace(s);
inQ[s] = 1;
while(!q.empty()) {
int u = q.front();
q.pop();
inQ[u] = 0;
for(const auto &[v, c]: adj[u]) {
if(dist[v] > dist[u] + c) {
dist[v] = dist[u] + c;
if(++frq[v] > n) {
fout << "Ciclu negativ!\n";
exit(0);
}
if(!inQ[v]) {
q.emplace(v);
inQ[v] = 1;
}
}
}
}
return dist;
}
int main() {
int n, m;
fin >> n >> m;
vector<vector<pair<int, int>>> adj(n);
for(int i = 0; i < m; i++) {
int u, v, c;
fin >> u >> v >> c;
u--; v--;
adj[u].emplace_back(v, c);
}
vector<int> dist = bf(0, adj);
for(int i = 1; i < n; i++) {
if(dist[i] == kInf) {
fout << "0 ";
} else {
fout << dist[i] << " ";
}
}
return 0;
}