专栏文章

题解:P5008 [yLOI2018] 锦鲤抄

P5008题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@min7wu2x
此快照首次捕获于
2025/12/01 22:01
3 个月前
此快照最后确认于
2025/12/01 22:01
3 个月前
查看原文

P5008 [yLOI2018] 锦鲤抄 题解

闲话: 背景很感人,是为数不多的有故事而且有情感的好题(我很喜欢,但题目名字可以改一改)。

题目大意

如果抛开背景不谈,那么题目可以变为:
给出 nn 个点 mm 条边的一张有向无环图,每个点有一个点权值。
你每次可以选择一个有入度的点获取其点权然后删除这个点。
求能取 kk 次的情况下最大能获得的权值和。

解题思路

前言: 没学过 Tarjan 的建议先去学一学,很有用的。

如果是有向无环图:

  • 入度为 00 的点可以直接删。
  • 如果点 xx 连向点 yy ,并且 xxyy 我们都想删除,那么我们肯定是先删除 yy 再删除 xx,否则删 xxyy 还有入边(来自 xx)就不能删。

如果有环:

如果整个强连通分量没有来自外部的入边(即入度为 00 的强连通分量),那么你无法直接删除它里面的任何一个点,因为每个点都有来自环内其他点的入边。
为了打破这个僵局,你必须至少保留这个强连通分量中的一个点不删除(这样其他点才能按顺序删掉,为了权值和最大,我们保留权值最小的那个点)。

Tarjan

Tarjan 算法可以把有向图的所有强连通分量(SCC)找出来,并且把每个 SCC 缩成一个点,形成一个新的 DAG(称为缩点图),这样就可以了,是不是很有用?

代码

评论

0 条评论,欢迎与作者交流。

正在加载评论...