Pagini recente » Cod sursa (job #2399408) | Cod sursa (job #684422) | Cod sursa (job #2311104) | Cod sursa (job #11012) | Cod sursa (job #381964)
Cod sursa(job #381964)
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
#define INF 0x3f3f3f3f
#define pb push_back
#define mp make_pair
#define DIM 50005
#define sc second
#define fs first
int dst[DIM],viz[DIM];
vector <pair <int,int> > lst[DIM];
queue <int> q;
int n,m;
void read ()
{
freopen ("bellmanford.in","r",stdin);
int i,x,y,z;
scanf ("%d%d",&n,&m);
for (i=1; i<=m; ++i)
{
scanf ("%d%d%d",&x,&y,&z);
lst[x].pb (mp (y,z));
}
}
void bellmanford ()
{
long long cnt;
int i,nod;
memset (dst,INF,sizeof (dst));
for (cnt=1, dst[1]=0, q.push (1), viz[1]=1; !q.empty () && cnt<=(long long)n*m; q.pop ())
{
nod=q.front ();
viz[nod]=0;
for (i=0; i<(int)lst[nod].size (); ++i)
if (dst[nod]+lst[nod][i].sc<dst[lst[nod][i].fs])
{
dst[lst[nod][i].fs]=dst[nod]+lst[nod][i].sc;
if (!viz[lst[nod][i].fs])
{
q.push (lst[nod][i].fs);
viz[lst[nod][i].fs];
}
}
}
}
void print ()
{
freopen ("bellmanford.in","r",stdin);
freopen ("bellmanford.out","w",stdout);
int i,x,y,z;
scanf ("%d%d",&n,&m);
for (i=1; i<=m; ++i)
{
scanf ("%d%d%d",&x,&y,&z);
if (dst[x]+z<dst[y])
{
printf ("Ciclu negativ!");
return ;
}
}
for (i=2; i<=n; ++i)
printf ("%d ",dst[i]);
}
int main ()
{
read ();
bellmanford ();
print ();
return 0;
}