Pagini recente » Cod sursa (job #863480) | Cod sursa (job #302098) | Cod sursa (job #1276916) | Profil elena.mirica | Cod sursa (job #889883)
Cod sursa(job #889883)
#include<stdio.h>
#include<vector>
#include<algorithm>
#define INF 50002
#define MAX 1666
using namespace std;
struct edge
{
int x,y,c;
};
vector<edge> edges;
int dist[INF],n,m,ind=0;
char buff[MAX];
void pRead(int &n)
{
int x=0,sgn=1;
while((buff[ind]<'0'||buff[ind]>'9')&&buff[ind]!='-')
{
++ind;
if(ind==MAX){fread(buff,1,MAX,stdin);ind=0;}
}
if(buff[ind]=='-'){sgn=-1;++ind;}
while(buff[ind]>='0'&&buff[ind]<='9')
{
x=x*10+buff[ind]-48;
++ind;
if(ind==MAX){fread(buff,1,MAX,stdin);ind=0;}
}
n=x*sgn;
}
int main()
{
freopen("bellmanford.in","r",stdin);
freopen("bellmanford.out","w",stdout);
pRead(n);pRead(m);
for(int i=0;i<m;++i)
{
edge e;
pRead(e.x);pRead(e.y);pRead(e.c);
edges.push_back(e);
}
for(int i=1;i<=n;++i)dist[i]=99999999;
bool ok=1;
dist[1]=0;
for(int i=0;ok&&i<n-1;++i)
{
ok=0;
for(int j=0;j<edges.size();++j)
{
edge e=edges[j];
if(dist[e.y]>dist[e.x]+e.c){dist[e.y]=dist[e.x]+e.c;ok=1;}
}
}
for(int j=0;j<edges.size();++j)
{
edge e=edges[j];
if(dist[e.y]>dist[e.x]+e.c){printf("Ciclu negativ!\n");return 0;}
}
for(int i=2;i<=n;++i)printf("%d ",dist[i]);
return 0;
}