Pagini recente » Cod sursa (job #2796947) | Cod sursa (job #3182135) | Cod sursa (job #2561170) | Cod sursa (job #2048222) | Cod sursa (job #704413)
Cod sursa(job #704413)
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
struct VARF
{int nod, cost;};
const int N = 50099;
const int INF=1000000000;
vector <VARF> a[N];
queue <int> q;
int nrq[N],d[N],n;
bool inq[N];
void citire()
{
int x,m,i;
VARF aux;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&aux.nod,&aux.cost);
a[x].push_back(aux);
}
}
void init()
{
for(int i=1;i<=n;i++)
d[i]=INF;
}
void afisare()
{
for(int i=2;i<=n;i++)
printf("%d ",d[i]);
}
bool bfs(int x0)
{
int x,y;
q.push(x0);
inq[x0] = true;
d[x0]=0;
while(!q.empty())
{
x=q.front();
q.pop();
inq[x] = false;
for(size_t i=0; i<a[x].size();i++)
{
y=a[x][i].nod;
if(d[x]+a[x][i].cost<d[y])
{
d[y]=d[x]+a[x][i].cost;
if(!inq[y])
{
nrq[y]++;
q.push(y);
inq[y] = true;
if(nrq[y]==n)
{
return false;
}
}
}
}
}
return true;
}
int main()
{
freopen("bellmanford.in","r",stdin);
freopen("bellmanford.out","w",stdout);
citire();
init();
if(bfs(1)==false)
printf("Ciclu negativ!");
else
afisare();
return 0;
}