首页 > 其他分享 >P1484 种树 题解

P1484 种树 题解

时间:2024-03-29 19:23:30浏览次数:16  
标签:P1484 增广 题解 相邻 种树 区间 价值 对应

P1484 种树

有 \(n\) 个坑。第 \(i\) 个坑种树的价值是 \(c_i\),相邻坑不能同时种。可以种 \(k\) 颗树,求最大价值。

模拟费用流,建图类似这样:

中间两层结点之间有 \(7\) 条边,表示 \(n=7\) 的情况。相邻两条边,例如 \(1,2\) 总流入量为 \(1\),\(2,3\) 总流出量为 \(1\),也不可能出现相邻两条边同时流的情况,对应相邻两个坑不能同时种树。

在上面的图里找增广路的时候,我们发现增广路上每条边的流量有特征:源点流出和汇点流入的边流量都是 \(0\),其余边 \(0,1\) 不断交替且 \(0\) 开头 \(0\) 结尾:例如 0 1 0 1 0 就是一种可能的情况。

对应到原问题里,初始每个坑位都是 \(0\)。种了树就会变 \(1\)。一个区间如果开头结尾为 \(0\)、\(0,1\) 交替且区间左边一个和右边一个都是 \(0\),这就对应一个增广路。

可见一开始每个坑位都对应一个区间,也对应一个增广路。

而更新一条增广路,会使路径上的 \(0\) 变 \(1\),\(1\) 变 \(0\);对应到原问题里就是区间内 \(0\) 变 \(1\),\(1\) 变 \(0\)。

发现将区间翻转后,因为规定了一个区间左边一个右边一个为 \(0\),且开头结尾为 \(0\),所以反转后刚好和左右拼成一个更大的区间。

那我们可以用链表来维护这些区间。同时搞一个堆,这个堆用来每次找最大价值的区间。一个区间的价值定义为其中 \(1\) 的价值减去 \(0\) 的价值。

每次挑出一个价值最大的且未被标记为不可选的区间 \(d\),统计其价值,同时通过链表找到它相邻的两个区间 \(d_1,d_2\),将 \(d,d_1,d_2\) 合并为一个大区间,价值为 \(v_{d_1}+v_{d_2}-v_d\),然后把原本的 \(d_1,d_2\) 标记为不可选。

一直挑,挑到够了 \(k\) 个就结束。

标签:P1484,增广,题解,相邻,种树,区间,价值,对应
From: https://www.cnblogs.com/FLY-lai/p/18104465

相关文章

  • Luogu P6834 梦原 题解
    原题传送门首先考虑如果树的形态确定了之后的情况:如果当前点比爸爸的值大,那么显然爸爸变成\(0\)之后,这个点需要自己被额外操作删除,贡献就是\(a[v]-a[u]\)。类似,如果比爸爸的值小,那么这个点肯定会跟爸爸一起被删除,所以贡献就是\(0\)。综上所述,一个点的贡献是\(max{a[v]-......
  • ICPC2023 杭州 题解
    M-V-DiagramSolution很显然,连续的子序列的一段肯定是包括最左边或最右边的其中一个点Code#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constllinf=1ll<<60;intmain(){intt;cin>>t;while(t--){ intn;cin>>n;......
  • [正常题解]Acwing.5308 公路
    ​首先需要理解一个证明:​ 假设我们有三个点,前两个点价格为\(a_1,\a_2\),距离为\(v_1,\v_2\)那么就有式子:\(\frac{a_1\timesv_1}{d}+\frac{a_2\timesv_2}{d}\式①\),和式子\(\frac{a_1\timesv_1}{d}+\frac{a_1\timesv_2}{d}\式子②\)$\rightarrow\frac{1}{d}(......
  • CF1184E1题解
    CF11841E1&blog尽然想让第一条边最大且这条边在最小生成树中,那么这条边就需要尽量晚。但是假如加上一条边\(i\)可以使\(u_1\)和\(v_1\)联通并且第\(w_i\lew_1\)那么我们就会舍弃原本第一条边,使用第\(i\)条边。所以第一条边的比安全一定小于等于所有么满足上述条......
  • 2023年全国青少年信息素养大赛 第9届Python编程挑战赛北京赛区(小学组)复赛试题解析
    2023年全国青少年信息素养大赛第9届Python编程挑战赛北京赛区(小学组)复赛试题解析T1.求余数题目描述:输入一个正整数,输出这个整数除以5的余数。输入描述:输入一行一个正整数输出描述:输出这个整数除以5的余数样例1:输入:12输出:2#示例代码n=int(input())print(n%5)......
  • 【洛谷 P8738】[蓝桥杯 2020 国 C] 天干地支 题解(字符串+数学+模运算)
    [蓝桥杯2020国C]天干地支题目描述古代中国使用天干地支来记录当前的年份。天干一共有十个,分别为:甲(jiǎ)、乙(yǐ)、丙(bǐng)、丁(dīng)、戊(wù)、己(jǐ)、庚(gēng)、辛(xīn)、壬(rén)、癸(guǐ)。地支一共有十二个,分别为:子(zǐ)、丑(chǒu)、寅(yín)、卯(mǎo)、辰(chén)、巳(sì)、午(wǔ......
  • 【洛谷 P8654】[蓝桥杯 2017 国 C] 合根植物 题解(并查集)
    [蓝桥杯2017国C]合根植物题目描述w星球的一个种植园,被分成m×nm\timesnm×n个小格子(东西方向......
  • 启动应用程序出现FirewallAPI.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个FirewallAPI.dll文件(挑选合适的版本文件)把......
  • 启动应用程序出现fthsvc.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个fthsvc.dll文件(挑选合适的版本文件)把它放......
  • 启动应用程序出现fontext.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个fontext.dll文件(挑选合适的版本文件)把它放......