Pagini recente » Cod sursa (job #1733420) | Cod sursa (job #3171175) | Cod sursa (job #2119543) | Istoria paginii info-oltenia-2018/echipe/11-12 | Cod sursa (job #2848859)
#include <iostream>
#include <fstream>
#include <bitset>
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
int t[3][250000],coada[1000000],ciclu[50005],n,m,start[50005],c[50005];
int k=0,i,j,cost,prim,ultim,x,p,o;
bool ok=1;
bitset <50005>viz;
void initializare()
{
int i,maxi=10000101;
for(i=1;i<=n;i++)
c[i]=maxi;
}
int main()
{
f>>n>>m;
for(o=1;o<=m;o++)
{
k++;
f>>i>>j>>t[2][k];
t[0][k]=j;
t[1][k]=start[i];
start[i]=k;
}
initializare();
prim=ultim=1;
c[1]=0;
viz[1]=1;
coada[prim]=1;
while(prim<=ultim)
{
x=coada[prim];
ciclu[x]++;
viz[x]=0;
if(ciclu[x]>=n)
{
ok=0;
break;
}
p=start[x];
while(p)
{
if(c[x]+t[2][p]<c[t[0][p]])
{
c[t[0][p]]=c[x]+t[2][p];
if(viz[t[0][p]]==0)
{
viz[t[0][p]]=1;
ultim++;
coada[ultim]=t[0][p];
}
}
p=t[1][p];
}
prim++;
}
if(ok==0)
{
g<<"Ciclu negativ!";
}
else
{
for(o=2;o<=n;o++)
g<<c[o]<<" ";
}
return 0;
}