Pagini recente » Cod sursa (job #1387001) | Cod sursa (job #540780) | Cod sursa (job #2942472) | Cod sursa (job #1550794) | Cod sursa (job #1700884)
#include <fstream>
using namespace std;
ifstream cin ("bellmanford.in");
ofstream cout ("bellmanford.out");
int t[3][250010],start[250010],d[250010],viz[50010],n,m,coada[500010],fr[50010];
bool ok=true;
void citire ()
{
cin>>n>>m; int x;
for(int i=1;i<=m;i++)
{
cin>>x>>t[0][i]>>t[2][i];
t[1][i]=start[x]; start[x]=i;
}
}
void init ()
{
for(int i=2;i<=n;i++)
d[i]=300000000;
coada[1]=1;
}
void ford ()
{
int pi=1,ps=1;
while(ps<=pi)
{ int x=coada[ps]; viz[x]=0;
int p=start[x];
while(p!=0)
{
if(d[x]+t[2][p]<d[t[0][p]])
{
d[t[0][p]]=d[x]+t[2][p];
if(d[1]<0) {ok=false;return ;}
if(viz[t[0][p]]==0) { viz[t[0][p]]=1; pi++; coada[pi]=t[0][p]; fr[t[0][p]]++; if(fr[t[0][p]]>m) {ok=false;return ; }}
} p=t[1][p];
} ps++;
}
}
void scrie ()
{
if(ok==false) cout<<"Ciclu negativ!";
else
for(int i=2;i<=n;i++) { if(d[i]==300000000) d[i]=0; cout<<d[i]<<" ";}
}
int main()
{
citire();
init();
ford();
scrie();
cin.close();
cout.close();
return 0;
}