Pagini recente » Cod sursa (job #867756) | Cod sursa (job #35695) | Cod sursa (job #2585993) | Cod sursa (job #252363) | Cod sursa (job #2714006)
#include <bits/stdc++.h>
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
const int INF = 1e9;
vector <pair <int, int>> adj[50001];
bitset <50001> u;
int d[50001], cnt[50001];
int N, M, Q;
void SPFA(int s){
queue <int> q;
for(int i = 1;i <= N;i++)
d[i] = INF;
d[s] = 0, u[s] = 1;
q.push(s);
while(!q.empty()){
int v = q.front();
q.pop();
u[v] = 0;
for(auto edge : adj[v]){
int to = edge.first;
int len = edge.second;
if(d[v] + len < d[to]){
d[to] = d[v] + len;
if(!u[to]){
q.push(to);
u[to] = 1;
cnt[to]++;
if(cnt[to] > N){
g << "Ciclu negativ!";
return;
}
}
}
}
}
for(int i = 2;i <= N;i++)
g << d[i] << " ";
}
int main(){
f >> N >> M;
while(M--){
int x, y, val;
f >> x >> y >> val;
adj[x].emplace_back(y, val);
}
SPFA(1);
}