【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,你大概 ...
随机推荐
- 设计模式-享元模式(FlyWeight)
一.概念 享元模式是对象的结构模式,它以共享的方式高效的支持大量的细粒度对象,减少对象的数量,并达到节约内存的目的. 享元对象能够做到共享的关键,主要是区分了内部状态和外部状态,内部状态是对象是在建立 ...
- Android基础系列合集
四大组件 1.Service Android四大组件-Service Android-远程Service Service 动态更新 UI 2.Activity Android四大组件-Activity ...
- SAP MM 并非奇怪现象之MB5B报表查不到某一笔出库记录?
物料号:1301002696 工厂代码:2160 MB5B,如下查询条件, 查询结果中,期初与期末库存数量都是0,期间的出库入库数量都是0.事实上该物料期初应该是有库存的.并且我用MB51相同时间段查 ...
- (网页)12种不宜使用的Javascript语法(转)
转自阮一峰: 最近写的一些小东西,总是出各种各样的问题,用了angular.js反应居然比我的jQuery还慢,客户吐槽了,我又把一个小操作,改成了jQuery.浏览一下大神的的博客.转载一点东西: ...
- BigDecimal遇到的问题,大伙也说说
一:相除精度丢失的问题 BigDecimal的api除法相对加减乘要实现的复杂多了,只介绍常用的我遇到的问题: 问题:两数相除,如果9/3=3整除没问题,但是10/3=0.33333333...... ...
- Nginx安装成Windows服务
因为有项目使用Nginx来做负载均衡,但是Nginx的Windows版本是不提供安装成服务的,所以服务器重启后Nginx并不会伴随启动和恢复.网上查了下,这里记录下解决方法,防止遗忘. 第一步:下载W ...
- python学习--Django虚拟环境搭建
一 . 为什么选择搭建虚拟环境 搭建一个只对本次项目有用的虚拟环境,而不影响主环境 二 . 安装前准备 # 1. 安装 python # 2. 安装virtualenvwrapper # ...
- January 11th, 2018 Week 02nd Thursday
Live, travel, adventure, bless, and don't be sorry. 精彩地活着,不停地前行,大胆冒险,心怀感激,不留遗憾. Everything we do is ...
- 【18】如何把数据存储到MongoDB数据库
如何把数据存储到MongoDB数据库 时间:2018.10.31 edit by :北鼻 一.mongoDB环境安装 需要使用mongoDB数据库的话需要安装环境, ...
- (转)Python网络爬虫实战:世纪佳缘爬取近6万条数据
又是一年双十一了,不知道从什么时候开始,双十一从“光棍节”变成了“双十一购物狂欢节”,最后一个属于单身狗的节日也成功被攻陷,成为了情侣们送礼物秀恩爱的节日. 翻着安静到死寂的聊天列表,我忽然惊醒,不行 ...