【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,你大概 ...
随机推荐
- inheritCombination.js
// 组合继承 // 其基本思路是使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承 function Person(name){ this.name = name; th ...
- vue点击元素变色兄弟元素不变色
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- postgresql-10.1-3-windows-x64 安装之后,起动pgAdmin 4问题(win10)
运行pgAdmin出现”pgAdmin 4 the application server could not be contant“ 窗口. 参考:https://stackoverflow.com ...
- React 入门学习笔记整理(一)——搭建环境
使用create-react-app脚手架搭建环境 1.安装node .软件下载地址:https://nodejs.org/en/,我下的推荐的版本. 安装之后测试是否安装成功.windows系统下, ...
- JMeter 集合点设置之Synchronizing Timer的使用
集合点设置之Synchronizing Timer的使用 by:授客 QQ:1033553122 1.布局设置 注: 1) 说明: 名称:自定义名称 Number of Simulated Users ...
- vuejs组件库pk介绍
vuejs可以说是近2年多以来最火的前端框架,随之而来就产生了非常多的组件库,我们来看看其中比较著名和人气旺盛的几个 1. Vuetify-符合material design设计理念, star数量7 ...
- [20180604]在内存修改数据(bbed).txt
[20180604]在内存修改数据(bbed).txt --//以前曾经做过在内存修改数据,通过oradebug poke命令修改内存信息,相关链接:--//http://blog.itpub.net ...
- Chrome及Chrome内核浏览器改变开发者工具字体大小
1.打开浏览器,按F12调用开发者工具 2.按Ctrl+数字加号键,可看到字体变大,按Ctrl+数字减号键,字体变小 3.重新启动浏览器后字体仍然保持修改后的字体大小
- Java的学习路线建议(转)
https://www.cnblogs.com/huaxingtianxia/p/5724093.html
- 4.4Python数据类型(4)之字符串函数
返回总目录 目录: 1.字符串的查找计算 2.字符串的转换 3.字符串的填充压缩 4.字符串的分割拼接 5.字符串的判定 (一)字符串的查找计算 (1)len(str)计算字符串的总数 (2)find ...