Pagini recente » Cod sursa (job #2693860) | Cod sursa (job #2528353) | Cod sursa (job #2960492) | Cod sursa (job #1350950) | Cod sursa (job #3136399)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("royfloyd.in");
ofstream fout("royfloyd.out");
const int NMAX = 1005;
const int INF = 1000000000;
int n, m;
int G[NMAX][NMAX];
int dist[8][NMAX][NMAX];
void read() {
fin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
G[i][j] = INF;
for (int i = 1; i <= m; i++) {
int u, v, c;
fin >> u >> v >> c;
G[u][v] = min(G[u][v], c);
}
}
void doDp() {
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
dist[0][i][j] = G[i][j];
for (int k = 1; (1 << (k - 1)) < n; k++) {
for (int x = 1; x <= n; x++)
for (int y = 1; y <= n; y++) {
dist[k][x][y] = dist[k - 1][x][y];
for (int z = 1; z <= n; z++)
dist[k][x][y] = min(dist[k][x][y], (dist[k - 1][x][z] + dist[k - 1][z][y]));
}
}
}
int main() {
read();
doDp();
int log = 0;
while ((1 << log) < n)
log++;
for (int i = 1; i <= n; i++)
if (dist[log][i][i] < 0) {
fout << "Ciclu negativ!";
return 0;
}
for (int j = 2; j <= n; j++) {
if (dist[log][1][j] >= INF)
fout << 0 << " ";
else
fout << dist[log][1][j] << " ";
}
return 0;
}