Pagini recente » Cod sursa (job #3211802) | Cod sursa (job #1212579) | Cod sursa (job #478752) | Cod sursa (job #2386847) | Cod sursa (job #2884453)
#include <fstream>
#include <queue>
#include <vector>
#define NMAX 50005
#define MMAX 250005
using namespace std;
ifstream in("bellmanford.in");
ofstream out("bellmanford.out");
const int INF = 1e9 + 7;
vector < pair <int, int> > vecini[NMAX];
queue < int > q;
int counter[NMAX];
int dist[NMAX];
bool viz[NMAX];
int main()
{
int n, m, i, j, x, y, c;
in >> n >> m;
for (i = 1; i <= m; ++i)
{
in >> x >> y >> c;
vecini[x].push_back({y, c});
}
/*for (i = 1; i <= n; ++i)
{
for (j = 0; j < vecini[i].size(); ++j)
out << vecini[i][j].first << " ";
out << '\n';
}*/
for (i = 2; i < NMAX; ++i)
{
dist[i] = INF;
}
dist[i] = 0;
q.push(1);
viz[1] = 1;
++counter[1];
while (!q.empty() && counter[q.front()] < n)
{
int nod = q.front();
//out << nod << '\n';
for (i = 0; i < vecini[nod].size(); ++i)
{
int vecin = vecini[nod][i].first;
int distanta = vecini[nod][i].second;
if (dist[nod] + distanta < dist[vecin])
{
dist[vecin] = dist[nod] + distanta;
++counter[vecin];
if (viz[vecin] == 0)
{
q.push(vecin);
viz[vecin] = 1;
}
}
}
viz[nod] = 0;
q.pop();
}
if (!q.empty())
out << "Ciclu negativ!";
else
{
for (i = 2; i <= n; ++i)
out << dist[i] << " ";
}
return 0;
}