Pagini recente » Cod sursa (job #2842928) | Cod sursa (job #85326) | Cod sursa (job #1004509) | Cod sursa (job #31969) | Cod sursa (job #1342260)
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
vector <int> G[50005];
vector <int> C[50005];
queue <int> q;
int u[50005];
int d[50005];
int n,m,i,x,y,c,cn;
bool viz[50005];
void bellmanford(int nod)
{
int i,x;
for(i=1;i<=n;++i) d[i]=2000000000;
d[nod]=0;
q.push(nod);
while(!q.empty() && !cn)
{
x=q.front(); q.pop(); viz[x]=0;
for(i=0;i<G[x].size() && !cn;++i)
{
if(d[G[x][i]] > d[x]+C[x][i])
{
++u[G[x][i]]; //de cate ori am relaxat distanta de la sursa la G[x][i]
d[G[x][i]]=d[x]+C[x][i];
if(u[G[x][i]]>n-1) cn=1; //am ciclu negativ
if(!viz[G[x][i]]) //daca nu-l am in coada deja, atunci il bag
{
viz[G[x][i]]=1;
q.push(G[x][i]);
}
}
}
}
}
int main()
{
f>>n>>m;
for(i=1;i<=m;++i)
{
f>>x>>y>>c;
G[x].push_back(y);
C[x].push_back(c);
}
bellmanford(1);
if(cn) g<<"Ciclu negativ!"<<'\n';
else
{
for(i=2;i<=n;++i) g<<d[i]<<" ";
g<<'\n';
}
return 0;
}