Pagini recente » Cod sursa (job #2105354) | Cod sursa (job #1469848) | Cod sursa (job #2286919) | Cod sursa (job #1955175) | Cod sursa (job #753666)
Cod sursa(job #753666)
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
#define INF 0xfffffff
using namespace std;
vector<pair<int,int> >g[50005];
queue<int>s0,s1;
int d[50005],n,m;
bool viz[50005];
void bellman(){
int y,j;
bool ok;
for(int i=2;i<=n;i++) d[i] = INF;
s0.push(1);
for(int i=2;i<=n;i++)
{
memset(viz,0,sizeof(viz));
ok = false;
while(s0.size() > 0)
{
j = s0.front();
for(int x=0;x<g[j].size();x++)
{
y = g[j][x].first;
if(d[y] > d[j]+g[j][x].second)
{
d[y]=d[j]+g[j][x].second;
if(viz[y] == 0)s1.push(y), viz[y] = 1;
ok = 1;
}
}
s0.pop();
}
swap(s0,s1);
}
if(ok) printf("Ciclu negativ!"); else
for(int i=2;i<=n;i++)printf("%d ",d[i]);
}
int main(){
int x,y,z;
freopen("bellmanford.in","r",stdin);
freopen("bellmanford.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i=0;i<m;i++)
{
scanf("%d %d %d",&x,&y,&z);
g[x].push_back( make_pair(y,z) );
}
bellman();
return 0;
}