Pagini recente » Cod sursa (job #1685988) | Cod sursa (job #471930) | Cod sursa (job #3174589) | Cod sursa (job #2828693) | Cod sursa (job #2721783)
#include <bits/stdc++.h>
#define MAX 2000000000
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
struct Elem
{
int dest, cost;
};
vector <Elem> v[50005];
queue <int> q;
bool viz[50005];
int ap[50005];
int dist[50005];
int main()
{
int N, M;
fin >> N >> M;
for(int i = 1; i <= M; i++)
{
int x, y, z;
fin >> x >> y >> z;
v[x].push_back({y, z});
}
for(int i = 2; i <= N; i++)
dist[i] = MAX;
q.push(1);
viz[1] = true;
ap[1]++;
while(!q.empty())
{
int Nod = q.front();
q.pop();
viz[Nod] = false;
for(int i = 0; i < v[Nod].size(); i++)
if(dist[v[Nod][i].dest] > dist[Nod] + v[Nod][i].cost)
{
dist[v[Nod][i].dest] = dist[Nod] + v[Nod][i].cost;
ap[v[Nod][i].dest]++;
if(ap[v[Nod][i].dest] > N)
{
fout << "Ciclu Negativ!" << '\n';
return 0;
}
if(viz[v[Nod][i].dest] == false)
{
q.push(v[Nod][i].dest);
viz[v[Nod][i].dest] = true;
}
}
}
for(int i = 2; i <= N; i++)
fout << dist[i] << " ";
return 0;
}