【Topcoder 10384】KingdomMap
Topcoder 10384
题意:给你一个森林,求是否能将这个森林的点集分成两部分,每部分放在一列中,要求边是直的并且不能交叉,问最少删哪几条边。
思路:我们考虑森林中的一棵树,以\(u\)为根,将\(u\)放在第一列。然后发现\(u\)的儿子们都应该放在第二列,并且如果我们不删掉\(u\)的这个儿子被放在了中间(即非最上和最下),它只有一种选择:将其所有的儿子到它的边删掉,将它们挪到其它地方。如果这个儿子在最上或最下,那么这个儿子可以取另一个可以有儿子的儿子,剩余的也必须没有儿子。
那么我们就有一个想法了。考虑\(dp(u,i)\)表示对于\(u\)这个节点,它可以取\(i\)个能取儿子的儿子,最少删边数。
我们考虑转移。对于\(dp(u,0)\),我们不能有能够取儿子的儿子,那么对于每一个儿子,我们的做法是这样的:要么我们将\(u\)到这个儿子的边断掉,将这个儿子挪到别处;要么我们留下这条边,但是我们必须将这个儿子到它所有儿子的边删掉。
然后就会发现我们需要考虑对于一个节点\(u\)我们断掉它到它所有儿子的边的代价。对于第\(i\)个儿子就是\(1+dp(son_i,2)\)。我们记这个值为\(val_i\)。
然后考虑\(dp(u,1)\)。我们可以取\(1\)个能延伸其它儿子的儿子。枚举那个儿子\(i\),那么\(dp(u,1)\)就是
\(dp(u,0)-val_i+dp(son_i,1)\)。
再考虑\(dp(u,2)\),也是一样枚举那两个可以延伸儿子的儿子,\(dp(u,2)\)取
\(dp(u,0)-val_i-val_j+dp(son_i,1)+dp(son_j,1)\)。
其实这样少考虑了一种情况(就像我原先一样。
如果当前节点\(u\)取了\(1\)个儿子\(i\),并且这个节点所挂子树是被孤立出去的,也就是说这个\(i\)是可以取两个延伸出去的儿子的,这可以让一些答案变少,比如我们断掉一个节点到它所有儿子的代价就会相应地变少。
那我们再来求这个取一个儿子的代价是什么。
首先肯定要将其它的儿子都断掉向它们的边,然后再取\(dp(son_i,2)\)就行了。
那么最后就是考虑怎么求方案了。
这个过程非常血腥暴力,是这样的:我们从头开始枚举每一条边,如果我们将这条边断掉之后再求一遍的答案也相应地减了\(1\),就说明我们可以将这条边给断掉,由于要求字典序最小就将它加到答案中。
需要注意如果这条边可以被断掉那就真正断掉它。
【Topcoder 10384】KingdomMap的更多相关文章
- 【Topcoder 10524】BrickPuzzle
Topcoder 10524 题意:给一个\(n\times m\)的棋盘,上面有一些格子是白色的,需要被一些俄罗斯方块们覆盖,俄罗斯方块有\(4\)种: 然后这些图案不能重叠或超出边界,并且每一个图 ...
- 【Topcoder 10107】TeamManagement
Topcoder 10107 题意:给定一棵树,其中有些点是忠诚的,现在要选k个点,每个选择的联通块都必须包含一个忠诚的点,求包含某个点的概率. 思路:考虑树型\(dp\),\(dp(i,j,0/1, ...
- 【Topcoder 1879】Scheduling
题意:给一个\(dag\),每一个点有一个访问时间. 现在可以同时访问两个点,但当连向这个点的所有点都被访问完成后才可以访问这个点. 问最短访问时间. 思路:一眼贪心.可惜是错的. 第二眼暴搜.就这么 ...
- 【Topcoder 10689】TheSoccerDivOne
题意:给\(n\)个队伍的积分,它们要踢足球,每个队伍剩下4场没有踢. 问踢完后\(0\)队伍最高排名. 思路:首先想了贪心,可惜不对. 那么老实dp. 首先:每个队伍具体和哪个人踢了没有关系. 那么 ...
- 【Topcoder 8572】TheLuckySum
题意:给一个数\(n\),要把它分成lucky numbers的和. 问个数最少.字典序最小的方案. 思路:果断搜索.个数最少,所以迭代加深.枚举要的个数\(m\). 首先我们看\(n\)的个位.它肯 ...
- 【Topcoder 1643】PossibleOrders
题意:给一些等价关系,问把所有的数按照大小排序的种类数. 思路:首先并查集维护等价类,然后设有\(n\)个等价类. 那么就可以\(dp\)了. 考虑\(dp(i)\)表示还剩下\(i\)个等价类,答案 ...
- 【topcoder SRM 702 DIV 2 250】TestTaking
Problem Statement Recently, Alice had to take a test. The test consisted of a sequence of true/false ...
- 【AR实验室】mulberryAR : ORBSLAM2+VVSION
本文转载请注明出处 —— polobymulberry-博客园 0x00 - 前言 mulberryAR是我业余时间弄的一个AR引擎,目前主要支持单目视觉SLAM+3D渲染,并且支持iOS端,但是该引 ...
- 【.net 深呼吸】细说CodeDom(1):结构大观
CodeDom 是啥东东?Html Dom听过吧,XML Dom听过吧.DOM一般可翻译为 文档对象模型,那 Code + DOM呢,自然是指代码文档模型了.如果你从来没接触过 CodeDom,你大概 ...
随机推荐
- C++中析构函数的作用
如果构造函数打开了一个文件,最后不需要使用时文件就要被关闭.析构函数允许类自动完成类似清理工作,不必调用其他成员函数. 析构函数也是特殊的类成员函数.简单来说,析构函数与构造函数的作用正好相反,它用来 ...
- 通过kubernetes构建ela服务
一.kubernetes 通过yaml 创建pod与service apiVersion: extensions/v1beta1 kind: Deployment metadata: name: el ...
- html5新特性学习笔记
1.语义化标签兼容问题(语义化标签只支持ie8以上,不包括ie8) 解决方法一:该标签的css中加上display:block; 通过DOM的方式创建这个标签 document.createEleme ...
- 在vue中赋值的路径没有被编译
当我们跑起来的时候,f12会看到相对路径,但是此时会报错,说找不到图片,这时候有其中一个办法,直接 require进去. 这时候就可以成功显示图片,但是路径会不一样,因为编译出来. 至于如何props ...
- Autoit3操作网页实现自动化
Autoit3 本身有内置的用户自定义函数IE.au3,只限于IE浏览器,如果是Firefox浏览器需要另外自定义函数. 找了很多资料发现有个FF.au3的自定义函数,下载地址 http://www. ...
- Linux 操作系统主机名变成bogon怎么解决?
主机名变成bogon怎么解决? by:授客 QQ:1033553122 一:使用hostname命令 [laiyu@localhost ~]$ hostname localhost.localdo ...
- Java网络编程--InetAdress类
一.地址 java.net包中的InetAddress 类对象含有一个Internet主机地址的域名和Ip地址 www.sina.com.cn/202.108.35.210 二.获取地址 1.获取In ...
- python第二十二天-----在做作业当中............
作业 1, ATM:模拟实现一个ATM + 购物商城程序 额度 自定义实现购物商城,买东西加入 购物车,调用信用卡接口结账可以提现,手续费5%支持多账户登录支持账户间转账记录每月日常消费流水提供还款接 ...
- 转,ffmpeg参数中文详细解释
a) 通用选项 -L license-h 帮助-fromats 显示可用的格式,编解码的,协议的...-f fmt 强迫采用格式fmt-I filename 输入文件-y 覆盖输出文件-t durat ...
- DMA与cache一致性的问题
Cache和DMA本身似乎是两个毫不相关的事物.Cache被用作CPU针对内存的缓存利用程序的空间局部性和时间局部性原理,达到较高的命中率,从而避免CPU每次都必须要与相对慢速的内存交互数据来提高数据 ...