Pagini recente » Cod sursa (job #1795006) | rar29 | Cod sursa (job #3137210) | Cod sursa (job #927493) | Cod sursa (job #999410)
Cod sursa(job #999410)
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
const int MAX_N = 50002;
const int INF = 0x3f3f3f3f;
int N, M;
int D[MAX_N], cnt[MAX_N];
vector < pair < int, int > > v[MAX_N];
queue < int > Q;
int main() {
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
f >> N >> M;
for(int i = 1, x, y, c; i <= M; ++i) {
f >> x >> y >> c;
v[x].push_back(make_pair(y, c));
}
memset(D, INF, sizeof(D));
Q.push(1);
D[1] = 0, cnt[1] = 1;
int ok = 1;
while(!Q.empty() && ok) {
int x = Q.front();
Q.pop();
for(size_t i = 0; i < v[x].size(); ++i) {
int y = v[x][i].first, c = v[x][i].second;
if(D[x]+c < D[y]) {
D[y] = D[x]+c;
++cnt[y];
Q.push(y);
if(cnt[y] > N)
ok = 0;
}
}
}
if(!ok)
g << "Ciclu negativ!";
else for(int i = 2; i <= N; ++i)
g << D[i] << " ";
g << "\n";
f.close();
g.close();
return 0;
}