一:将图中所有边权取负数,再跑一遍最短路算法即可。因为结果是最小的,反过来就是最大的
二:对于一个有向无环图,可以采取广搜将结点依次搜索,记录当前结点的最长路并在循环过程中不断更新。
void bfs()
{
memset(d,-1,sizeof(d)); //初始化为-1,便于无解时输出的d[n]为-1
d[1]=0;//但第一个结点前路径长为0
q.push(1);
while(!q.empty())
{
int t=q.front();
q.pop();
for(int i=1;i<=n;i++)
if(mp[t][i]&&d[i]<d[t]+mp[t][i])//如果从队列头到当前结点i有边,但不是最长(即此点的最长路小于队列头最长路加t-i的路径长)
{
d[i]=d[t]+mp[t][i];//更新最长路
q.push(i);//进入队列,搜索下一节点
}
}
}