P1807 最长路

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

P1807 最长路

思路

题目描述
设 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,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值