Pagini recente » Cod sursa (job #2840121) | Profil BlackNesta | Cod sursa (job #367348) | Cod sursa (job #1931048) | Cod sursa (job #794724)
Cod sursa(job #794724)
#include <cstdio>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
const int Nmax = 50010;
const int inf = 0x3f3f3f3f;
int N,M;
vector < pair<int,int> > L[Nmax];
int sol[Nmax],cnt[Nmax];
void solve()
{
int current;
queue<int> q;
vector< pair<int,int> >::iterator it;
for(int i=2;i<=N;++i)
sol[i] = inf;
sol[1] = 0;
q.push(1);
while (!q.empty())
{
current = q.front();
q.pop();
for(it = L[current].begin(); it != L[current].end() ; ++it)
if (sol[ (*it).first ] > sol[current] + (*it).second)
{
sol[ (*it).first ] = sol[current] + (*it).second;
q.push( (*it).first );
cnt[ (*it).first ] ++;
if (cnt[ (*it).first ] == N || (*it).first == 1)
{
printf("Ciclu Negativ!\n");
return ;
}
}
}
for(int i=2;i<=N;++i)
printf("%d ",sol[i]);
printf("\n");
}
void read()
{
int a,b,c;
scanf("%d",&N);
scanf("%d",&M);
for(int i=1;i<=M;++i)
{
scanf("%d%d%d",&a,&b,&c);
L[a].push_back( make_pair(b,c) );
}
}
int main()
{
freopen("bellmanford.in","r",stdin);
freopen("bellmanford.out","w",stdout);
read();
solve();
return 0;
}