Pagini recente » Cod sursa (job #1362978) | Cod sursa (job #2876296) | Cod sursa (job #2462519) | Cod sursa (job #1095901) | Cod sursa (job #1921787)
#include <bits/stdc++.h>
#define oo (1<<30)
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
vector< pair<int, int> >v[50001];
int n, m;
bool viz[50001]={false};
queue<int> q;
int nr[50001]={0};
int sol[50001];
int main(){
int i, j, a, b, c;
f >> n >> m;
for(i=1; i<=m; i++){
f >> a >> b >> c;
v[a].push_back(make_pair(b, c));
}
for(i=2; i<=n; i++)
sol[i] = oo;
q.push(1);
nr[1] = 1;
while(!q.empty()){
a = q.front();
q.pop();
viz[a] = false;
for(i=0; i<v[a].size(); i++)
if(sol[v[a][i].first] > sol[a] + v[a][i].second){
sol[v[a][i].first] = sol[a] + v[a][i].second;
if(!viz[v[a][i].first]){
viz[v[a][i].first] = true;
q.push(v[a][i].first);
nr[v[a][i].first]++;
if(nr[v[a][i].first] >= n){
g << "Ciclu negativ!\n";
return 0;
}
}
}
}
for(i=2; i<=n; i++)
g << sol[i] << " ";
g << "\n";
}