Pagini recente » Cod sursa (job #3314714) | Cod sursa (job #3329960) | Cod sursa (job #3329959) | Cod sursa (job #2739729) | Cod sursa (job #3327097)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
const long long INF = 1e18;
const int MAXN = 50000;
int n, m;
struct Muchie {
int u,v,cost;
};
vector<Muchie> muchii;
bool cicluNegativ=false;
vector<long long> BellmanFord (int start, vector<int> &tata){
vector <long long> d(n+1, INF);
d[start] = 0;
for (int i=1;i<=n-1;i++) {
for (const auto& m : muchii) {
if (d[m.u]!=INF) {
if (d[m.u]+m.cost<d[m.v]) {
d[m.v]=d[m.u]+m.cost;
tata[m.v]=m.u;
}
}
}
}
for (const auto& m : muchii) {
if (d[m.u] != INF && d[m.u] + m.cost < d[m.v]) {
cicluNegativ=true;
}
}
return d;
}
int main() {
f>>n>>m;
for (int i=1;i<=m;i++){
int x, y, c;
f>>x>>y>>c;
muchii.push_back({x, y, c});
}
vector<int> tata(n+1, 0);
vector<long long> dist = BellmanFord(1, tata);
if (cicluNegativ==true){
g<<"Ciclu negativ!"<<'\n';
}
else{
for (int i=2;i<=n;i++) {
if (dist[i]==INF) g<<0<<" ";
else g<<dist[i]<<" ";
}
}
return 0;
}