题目链接:https://www.luogu.org/problemnew/show/P1476
思路:
Floyd求最长路,输出:循环设置断点,然后把分成的两段相加看看是否相等,若相等就输出
参考博客:题解区最后一个
https://www.luogu.org/blog/user25119/solution-p1476
#include <iostream>
using namespace std;
int map[101][101],n,m,a,b,c;
int main()
{
cin >> n >> m;
for (int i = 0; i < m; i++)
{
cin >> a >> b >> c;
map[a][b] = c;
}
for(int k=1;k<=n+1;k++)
for(int i=1;i<=n+1;i++)
for (int j = 1; j <= n + 1; j++)
{
if (i != j && j != k && map[i][k] && map[k][j])
if (map[i][j] < map[i][k] + map[k][j])
map[i][j] = map[i][k] + map[k][j];
}
cout << map[1][n + 1]<<endl;
for (int i = 1; i <= n + 1; i++)
if (map[1][i] + map[i][n + 1] == map[1][n + 1])
cout << i <<" ";
return 0;
}