Pagini recente » Cod sursa (job #3191101) | Cod sursa (job #230381) | Cod sursa (job #230582) | Cod sursa (job #701757) | Cod sursa (job #1360791)
// bellmanford
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define pb push_back
#define inf (1<<30)+100
#define NMax 100005
using namespace std;
ofstream g("bellmanford.out");
int n, m;
vector<int> V[NMax];
vector<int> C[NMax];
int dist[NMax];
bool viz[NMax];
queue<int> q;
void read() {
ifstream f("bellmanford.in");
f>>n>>m;
for (int i=1;i<=m;i++) {
int a, b, c;
f>>a>>b>>c;
V[a].pb(b);
C[a].pb(c);
}
f.close();
}
void solve() {
for (int i=1;i<=n;i++)
dist[i] = inf;
dist[1] = 0;
int step = 0;
q.push(1);
while (!q.empty() && step <= (long long)n*m) {
int nod = q.front();
viz[nod] = false;
q.pop();
step++;
for (unsigned i=0;i<V[nod].size();i++) {
int vecin = V[nod][i];
if (dist[vecin] > dist[nod] + C[nod][i]) {
dist[vecin] = dist[nod] + C[nod][i];
if (!viz[vecin]) {
q.push(vecin);
viz[vecin] = true;
}
}
}
}
}
int main() {
read();
solve();
ifstream f("bellmanford.in");
f>>n>>m;
for (int i=1;i<=m;i++) {
int a, b, c;
f>>a>>b>>c;
if (dist[a] + c < dist[b]) {
cout<<"Ciclu negativ!\n";
return 0;
}
}
for (int i=2;i<=n;i++)
g<<dist[i]<<' ';
f.close(); g.close();
return 0;
}