0
点赞
收藏
分享

微信扫一扫

洛谷 P1476 休息中的小呆 Floyd 最长路


题目链接:​​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;
}

 

 

举报

相关推荐

0 条评论