zoukankan      html  css  js  c++  java
  • 洛谷 P3410 拍照

    洛谷 P3410 拍照

    题目描述

    小B有n个下属,现小B要带着一些下属让别人拍照。

    有m个人,每个人都愿意付给小B一定钱让n个人中的一些人进行合影。如果这一些人没带齐那么就不能拍照,小B也不会得到钱。

    注意:带下属不是白带的!!!对于每个下属,如果他带了那么小B需要给他一些钱,保证当他拍照时配合。

    请问,小B的净收益最多是多少。

    输入输出格式

    输入格式:

    第1行有2个正整数m和n(0<m,n<=100)。接下来的m行,每行是一个要求拍照的人的有关数据。第一个数是他同意支付该合影的费用;接着是该合影需要的若干下属的编号,以一个0作为行的结束标记。最后一行的n个数是带每个下属的费用。

    输出格式:

    一个数,表示最大收益。小B可以一个人也不带。

    输入输出样例

    输入样例#1: 复制
    2 3
    10 1 2 0
    25 2 3 0
    5 6 7
    输出样例#1: 复制
    17

    说明

    对于10%的数据每个人都要求让全部n个人合影

    对于30%的数据n<=15 m<=15

    另有10%的数据答案为0

    对于50%的数据n<=40 m<=40

    另有10%的数据每个人只愿意拍一个人

    对于100%的数据m,n<=100

    分析:这道题对我来说是网络流的一个新知识点:最大权闭合子图。其主要适用于类似本题的一类选派问题,即:两个集合A和B,已知一些关系集合Ci,满足其是A的子集,而i属于B,当Ci中元素均被选中时,有一个价值Vi,而每个元素有一个花费costi。这时只要建立源点S和汇点T,从S向每个Ci连边,流量限制为价值Vi,然后由A中每个元素向T连边,流量限制为costi,最后按照选派关系在中间连边,流量限制为inf,最后求全图最小割,也就是最大流,就是这个网络的最大权闭合子图的权值,至于具体证明我并不会。。不过有个博客讲的很清楚(非常建议看)传送门。注意求完权值得到的是最小花费,也就是假设了所有价值已经到手,此时答案就是总价值-最小花费。

    另外这道题可能因为价值与花费较大,普通网络流算法可能会被卡(也可能是我的网络流常数太大QAQ),要使用效率更高的。(我用的是Dinic)

    代码

    代码

  • 相关阅读:
    Typora入门使用
    什么是Structed Streaming?
    Spark的join什么情况下可以避免shuffle?
    spark Executor启动过程分析
    在IDEA中使用Git
    Git和SVN的区别
    Flink on Yarn的两种模式
    如何查看执行计划
    SQL Server 堆表与栈表的对比(大表)
    SQL Server中CURD语句的锁流程分析
  • 原文地址:https://www.cnblogs.com/xuzihanllaa/p/7967602.html
Copyright © 2011-2022 走看看