Pagini recente » Cod sursa (job #1277162) | Cod sursa (job #1323344) | Cod sursa (job #1159814) | Cod sursa (job #2407056) | Cod sursa (job #2147175)
#include <fstream>
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
#define nmax 50005
#define mmax 250005
#define inf 1<<30
int p,u,n,m,pus[nmax],d[nmax],c[mmax];
bool s[nmax];
struct nod {int val,cost;nod *urm;}*v[nmax],*r,*q;
void afis () {
for (int i=2;i<=n;++i)
g<<d[i]<<' ';
g<<'\n';}
void read () {
f>>n>>m;
int x,y,z;
for (int i=1;i<=m;++i) {
f>>x>>y>>z;
q=new nod;
q->val=y;
q->cost=z;
q->urm=v[x];
v[x]=q;}}
void bf () {
for (int i=1;i<=n;++i)
d[i]=inf;
d[1]=0;
s[1]=1;
c[1]=1;
p=u=1;
bool cn=0;
while (p<=u) {
int x=c[p];
++pus[x];
++p;
if (pus[x]==n) {
cn=1;
break;}
r=v[x];
while (r!=0) {
int vec=r->val;
int cost=r->cost;
if (d[vec]>d[x]+cost) {
d[vec]=d[x]+cost;
if (!s[vec]) {
s[vec]=1;
c[++u]=vec;}}
r=r->urm;}
s[x]=0;}
if (!cn)
afis();
else
g<<"Ciclu negativ!"<<'\n';}
int main()
{ read();
bf();
return 0;
}