Pagini recente » Cod sursa (job #2282907) | Cod sursa (job #40020) | Cod sursa (job #1379772) | Cod sursa (job #2402251) | Cod sursa (job #3193169)
#include <bits/stdc++.h>
#define NMAX 50001
#define INF 1000000001
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
int n, m, dmin[NMAX], nr[NMAX];
vector<pair<int, int> > g[NMAX];
queue<int> q;
bool negativ;
int main(){
fin >> n >> m;
for(int i = 1; i <= m; i++){
int x, y, c;
fin >> x >> y >> c;
g[x].push_back({y, c});
}
for(int i = 1; i <= n; i++){
dmin[i] = INF;
}
dmin[1] = 0;
q.push(1);
while(!q.empty() && !negativ){
int vf = q.front();
q.pop();
for(auto i : g[vf]){
if(dmin[i.first] > dmin[vf] + i.second){
dmin[i.first] = dmin[vf] + i.second;
nr[i.first]++;
q.push(i.first);
if(nr[i.first] > n)
negativ = 1;
}
}
}
if(negativ)
fout << "Ciclu negativ!";
else{
for(int i = 2; i <= n; i++)
fout << dmin[i] << ' ';
}
}