• 题解 P5008 [yLOI2018] 锦鲤抄


    完整的阅读体验

    [button color="info" icon="" url="https://www.luogu.com.cn/problem/P5008" type=""]P5008 [yLOI2018] 锦鲤抄[/button]

    题意:(n) 个点 (m) 条边的有向图,带点权,每次可以选择一个有入度的点连同它的出边一起删除,并得到它的点权。可以重复这个过程至多 (k) 次,求最终得到的最大权值和。

    先考虑在更为简单的 DAG 图上进行操作。

    很明显,我们只要像拓扑排序一样,任选一些入度不为 0 的点,然后按拓扑序从后往前选择,就可以满足题意。

    所以在 DAG 上,我们只需要选 (k) 个入度不为 0 的 权值最大的点,就可以做到了。

    于是考虑怎么把原问题转换为在 DAG 上的问题。

    对于有向图很自然的一个想法就是用强连通分量缩点。

    如果一个强连通分量有入度,那显然这个分量里的任意一个点都可以选。

    考虑一个没有入度的强连通分量如下图。

    对于 (1→2→3→4→5→1) 这个强连通分量,不管按什么顺序选择,最后总会剩下一个点不能被选。

    显然这个点的权值最小的时候答案最优。

    于是我们就对于每一个入度为 0 的强连通分量寻找其中一个权值最小的点,然后剩下的点就可以任意选择了。

    sort 就完事了。

    不知道为啥我 sortnth_element 慢不了多少甚至还要快一点...

    完整代码Link

    个人博客地址: www.moyujiang.com 或 moyujiang.top
  • 相关阅读:
    百度多图上传
    uploadify--上传文件控件
    JS获取时间
    CSS选择器
    派大星博客的美化之路
    百度地图--JS版
    css实现元素下出现横线动画
    盒模型显隐、定位与流式布局思想
    css进度条
    Build Sharepoint 2013 Farm
  • 原文地址:https://www.cnblogs.com/moyujiang/p/14784952.html
Copyright © 2020-2023  润新知