Pagini recente » Cod sursa (job #2351401) | Cod sursa (job #2231349) | Istoria paginii runda/live | Cod sursa (job #2342606) | Cod sursa (job #1136131)
#include <cstdio>
#include <vector>
#include <queue>
#include <cstdlib>
#include <memory.h>
#include <bitset>
#define Nmax 50005
#define INF 0x3f3f3f3f
using namespace std;
vector<pair<int,int> > G[Nmax];
queue<int> Q;
bitset<Nmax>inQ;
int N,M,used[Nmax],D[Nmax];
void read()
{
scanf("%d%d",&N,&M);
int a,b,c;
for(int i = 1; i <= M; ++i)
{
scanf("%d%d%d",&a,&b,&c);
G[a].push_back(make_pair(c,b));
}
}
void bellman_ford(int k)
{
memset(D,INF,sizeof(D));
Q.push(k);
D[k] = 0;
while(!Q.empty())
{
k = Q.front(); Q.pop();
inQ[k] = 0;
for(vector<pair<int,int> >::iterator it = G[k].begin(); it != G[k].end(); ++it)
if(D[it->second] > D[k] + it->first)
{
D[it->second] = D[k] + it->first;
if(!inQ[it->second])
Q.push(it->second);
used[it->second] ++;
if(used[it->second] > Nmax)
{
printf("Ciclu negativ!\n");
exit(0);
}
}
}
for(int i = 2; i <= N; ++i)
if(D[i] == INF)
printf("0 ");
else
printf("%d ",D[i]);
}
int main()
{
freopen("bellmanford.in","r",stdin);
freopen("bellmanford.out","w",stdout);
read();
bellman_ford(1);
return 0;
}