[待补充][基础算法]无环有向图遍历 点价值最大问题

给定题目:

有向图G(v,e)有n个点与m个边,保证全联通且无环(无强连通分量)。

每个点(1~n)拥有一个价值Val,求所有 从 任意一个点另一个点 所遍历 所有点的价值的和 中的最大值。(所有...中的...)

一、拓扑排序+DP

待补充

二、直接DP

这类图必定可以转化为树的结构,如类似于下面这个图

 

 可以转化为

 

那么我们从每一深度来,设u为当前的点,vi为u的第i个儿子,基本dp递推公式就为

dp[u] = max(dp[vi]) + val[u]

其中base case为叶节点 dp[u] = val[u]

那么就可以从根节点dfs到叶节点,然后回溯每次进行判断

dp[u] = max(dp[v] + val[u] , dp[u])

那么怎么找到根节点,很明显根节点的入度为0,叶节点出度为0

那么在建边的时候记录每一个点的入度即可,再循环从1到n找到根节点

出度不需要记录,因为很明显叶节点可以直接head[u] = 0跳过前向星的查边,那么就需要把所有的点进行初始化 dp[u] = val[u]

posted @ 2021-12-20 23:46  蒟蒻zExNocs  阅读(98)  评论(0)    收藏  举报