思路
题目描述
设 G 为有 n 个顶点的带权有向无环图,G 中各顶点的编号为 1 到 n,请设计算法,计算图 G 中 <1,n> 间的最长路径。
有向无环图 这个条件可以告诉我们可以使用 拓扑排序
(当然可以用单源最短路径相关算法)
细节
- 一个变量sum,记录遍历过的所有点的总数,总数小于n继续遍历
- 用栈来实现递归时,注意栈内有多少个数,栈内没有数就不用继续遍历
- 因为是求1到n的各点距离,所以先要从1点开始遍历
代码
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n,m;
const int maxn=1e4+10;
const int maxm=5e5+10;
struct node{
int v,next,w;
}e[maxm];
int r[maxn];
int head[maxm];
int cnt=0;
int top=0;
int dis[maxn];
int ans[maxn];
void add(int u,int v,int w){
e[++cnt].v=v;
e[cnt].w=w;
e[cnt].next=head[u];
head[u]=cnt;
}
int main(){
memset(head,0

该博客介绍了P1807问题,即在有向无环图中寻找<1, n>间的最长路径。利用拓扑排序作为主要解决策略,通过设置变量sum记录遍历点数,并从顶点1开始进行遍历。博主分享了具体的代码实现,并推荐了类似题目洛谷P1137作为进一步练习。"
112966043,1095787,深入理解CSS3动画机制与应用,"['前端开发', 'CSS3', '动画效果', '网页设计', '交互设计']
最低0.47元/天 解锁文章
735

被折叠的 条评论
为什么被折叠?



