Pagini recente » Monitorul de evaluare | Cod sursa (job #1724543) | Cod sursa (job #2364192) | Cod sursa (job #1113869) | Cod sursa (job #1888339)
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cstdlib>
#define NMAX 50005
#define MMAX 250005
#define inf 0x3f3f3f3f
using namespace std;
int N,M;
vector<pair<int,int> > graf[NMAX];
int viz[NMAX],used[NMAX],d[NMAX];
void citire()
{
scanf("%d%d",&N,&M);
for(int i=1;i<=M;i++)
{
int x,y,c;
scanf("%d%d%d",&x,&y,&c);
graf[x].push_back(make_pair(y,c));
}
}
queue<int> q;
void bellman_ford()
{
for(int i=2;i<=N;i++)
d[i]=inf;
viz[1]=used[1]=1;
q.push(1);
while(!q.empty())
{
int nod = q.front();
q.pop();
used[nod]=0;
for(vector<pair<int,int> >::iterator ii = graf[nod].begin();ii!=graf[nod].end();ii++)
{
int nod_nou = ii->first;
int cost = ii->second;
if(cost + d[nod] < d[nod_nou])
{
d[nod_nou] = cost + d[nod];
if(!used[nod_nou])
{
q.push(nod_nou);
used[nod_nou]=1;
viz[nod_nou]++;
if(viz[nod_nou]==N)
{
printf("Ciclu negativ!");
exit(0);
}
}
}
}
}
}
void afisare()
{
for(int i=2;i<=N;i++)
printf("%d ",d[i]==inf?0:d[i]);
}
int main()
{
freopen("bellmanford.in","r",stdin);
freopen("bellmanford.out","w",stdout);
citire();
bellman_ford();
afisare();
return 0;
}