Pagini recente » Cod sursa (job #2484449) | Cod sursa (job #657040) | Cod sursa (job #1305870) | Cod sursa (job #1576773) | Cod sursa (job #889932)
Cod sursa(job #889932)
#include<stdio.h>
#include<vector>
#include<algorithm>
#include<deque>
#define INF 50002
#define MAX 1666
using namespace std;
struct edge
{
int x,c;
};
vector<edge> graph[INF];
deque<int> Q;
int dist[INF],n,m,ind=0,nrViz[INF];
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; if(ind==MAX){fread(buff,1,MAX,stdin);ind=0;}}
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;
int nod;
pRead(nod);pRead(e.x);pRead(e.c);
graph[nod].push_back(e);
}
for(int i=1;i<=n;++i)dist[i]=99999999;
dist[1]=0;
Q.push_back(1);
while(Q.size()>0)
{
int nod=Q[0];
for(int j=0;j<graph[nod].size();++j)
{
edge e=graph[nod][j];
if(dist[e.x]>dist[nod]+e.c)
{
++nrViz[e.x];
if(nrViz[e.x]==n){printf("Ciclu negativ!\n");return 0;}
dist[e.x]=dist[nod]+e.
c;Q.push_back(e.x);
}
}
Q.pop_front();
}
for(int i=2;i<=n;++i)printf("%d ",dist[i]);
return 0;
}