Pagini recente » Cod sursa (job #2474230) | Cod sursa (job #373753) | Cod sursa (job #2829229) | Cod sursa (job #467573) | Cod sursa (job #1857153)
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>
using namespace std;
ifstream in("bellmanford.in");
ofstream out("bellmanford.out");
vector<pair<int, int>>g[50005];
int best[50005];
bool inq[50005];
int ap[50005];
queue <int> Q;
int main()
{
int N,M,node;
in>>N>>M;
for (int i=1;i<=M;i++)
{
int a,b,c;
in>>a>>b>>c;
g[a].push_back(make_pair(b,c));
}
int S=1;
best[S]=0;
for (int i=2;i<=N;i++)
{
best[i]=50000001;
}
Q.push(S);
ap[S]++;
inq[S]=true;
while(!Q.empty())
{
node=Q.front();
Q.pop();
inq[node]=false;
for (int i=0;i<g[node].size();i++)
{
if(best[g[node][i].first]>best[node]+g[node][i].second)
{
best[g[node][i].first]=best[node]+g[node][i].second;
if (inq[g[node][i].first]==false)
{
inq[g[node][i].first]==true;
ap[g[node][i].first]++;
Q.push(g[node][i].first);
if (ap[g[node][i].first]>N)
{
out<<"Ciclu negativ!";
return 0;
}
}
}
}
}
for (int i=2;i<=N;i++)
out<<best[i]<<" ";
return 0;
}