Pagini recente » Cod sursa (job #1321119) | Cod sursa (job #2162883) | Cod sursa (job #1411761) | Cod sursa (job #1365355) | Cod sursa (job #1594686)
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
#define w 50001
#define pp pair<int,int>
#define c first
#define x second
using namespace std;
priority_queue <pp> q;
vector <pp> a[w];
bool viz[w];
int cnt[w];
int d[w];
int main()
{
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
int t,i,n,m,x,y,cost,negc=0;
pp r;
f>>n>>m;
for (i=1;i<=m;i++)
{
f>>x>>y>>cost;
a[x].push_back(make_pair(cost,y));
}
for (i=2;i<=n;i++)
d[i]=INT_MAX;
q.push(make_pair(0,1));viz[1]=1;cnt[1]++;
while ( (!q.empty()) && (!negc) )
{
t=q.top().x;
q.pop();viz[t]=0;
for (i=0;i<a[t].size();i++)
{
r=a[t][i];
if (d[r.x]>d[t]+r.c)
{
d[r.x]=d[t]+r.c;
if (!viz[r.x])
{
if (cnt[r.x]>n) negc=1;
else
{
q.push(make_pair(-d[r.x],r.x));
viz[r.x]=1;
cnt[r.x]++;
}
}
}
}
}
if (negc)
g<<"Ciclu negativ!\n";
else
{
for (i=2;i<=n;i++)
{
g<<d[i]<<' ';
}
g<<'\n';
}
f.close();
g.close();
return 0;
}