Pagini recente » Cod sursa (job #2750428) | Cod sursa (job #2717741) | Cod sursa (job #1168482) | Cod sursa (job #2312968) | Cod sursa (job #2225668)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
const int Maxx=5e4+1;
const int INF=1<<30;
const int Maxxx=25e4+1;
struct NODE {
int node,cost;
}ac;
vector <NODE> A[Maxx];
priority_queue <NODE> Q;
bool operator <(const NODE &a,const NODE &b){
return a.cost<b.cost;
}
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
int n,m;
int nod,pret,x,y;
int ans[Maxx];
int ciclu[Maxxx];
void afis(bool n);
int main() {
fin>>n>>m;++m;
for (int i=1;i<=n;++i) ans[i]=INF;
for (;--m;){
fin>>x>>y>>pret;
A[x].push_back({y,pret});
}
ac.node=1;
ac.cost=0;
Q.push(ac);
ans[1]=0;
while (!Q.empty()){
ac=Q.top();
Q.pop();
if (ans[ac.node]<ac.cost) continue;
for (int i=0;i<A[ac.node].size();++i){
if (ans[A[ac.node][i].node]>ac.cost+A[ac.node][i].cost){
ans[A[ac.node][i].node]=ans[ac.node]+A[ac.node][i].cost;
Q.push({A[ac.node][i].node,ans[A[ac.node][i].node]});
++ciclu[A[ac.node][i].node];
if (ciclu[A[ac.node][i].node]>n) {
fout<<"Ciclu negativ!";
return 0;
}
}
}
}
for (int i=2;i<=n;++i)
fout<<ans[i]<<" ";
return 0;
}