http://acm.hdu.edu.cn/showproblem.php pid=2833
大致题意:给定一个无向图,以及悟空和师傅起点与终点,求它们分别从起点到终点的最短路径中经过相同的点的最大个数。
思路:首先dijkstra求出最短路,那么如果有dis[a] + map[a][b] = dis[b],则边(a,b)一定在最短路径上。根据这一定理可以求出所有最短路径。然后类似于求最长公共子序列求经过的相同点的最大个数。
即若a==b ,dp[a][b] = max(dp[i][j]+1)
否则 dp[a][b] = max(dp[a][j],dp[i][b]),其中i,j分别是a,b的直接前驱节点。
#include
#include
#include
#include
#include