POJ3659 [usaco2008jan_gold]电话网络
校内OJ上的题,刚开始做的时候以为是道SB题10分钟就能搞完..
然后准备敲了才发现自己是个SB..
刚开始以为是个很裸的TreeDP,然后就只设了两个状态,但是怎么想怎么不对。复杂度好像要爆炸。改成左儿子右兄弟好像根本无法转移..
搜了搜题解,发现不用改成左儿子右兄弟,把两个状态改成三个状态就行了
$f[node][0]$ 在$node$节点的子树被覆盖且$node$被建立
$f[node][1]$ 在$node$节点的子树被覆盖且$node$未被建立
$f[node][2]$ 在$node$节点的子树均被覆盖但是$node$未被覆盖
然后对于$f[node][0]$和$f[node][2]$的状态转移方程可以很好的写出
$f[node][0]=\sum min(f[son][0],f[son][1],f[son][2])+1$
$f[node][2]=\sum f[son][1]$
$f[node][1]$相对来说有些麻烦,状态转移方程没那么好写。简单说一下就是$\sum min(f[son][1],f[son][0])$ 但是限制存在,是必须存在一个$son$的状态为$0$,所以需要在代码上加一些小处理。
需要注意的是,这里的状态必须为$0$的$son$并不是值最小的,而是和状态为$1$的比起来差值最大的。
代码实现上也存在一些细节,不多说。
//OJ 1946
//by Cydiater
//2016.9.18
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <map>
#include <ctime>
#include <cmath>
#include <cstdlib>
#include <iomanip>
using namespace std;
#define ll long long
#define up(i,j,n) for(int i=j;i<=n;i++)
#define down(i,j,n) for(int i=j;i>=n;i--)
;;
;
inline ll read(){
,f=;
;ch=getchar();}
+ch-';ch=getchar();}
return x*f;
}
ll N,f[MAXN][],LINK[MAXN],len=;
struct edge{
ll y,next;
}e[MAXN];
namespace solution{
inline void insert(int x,int y){e[++len].next=LINK[x];LINK[x]=len;e[len].y=y;}
void init(){
N=read();
up(i,,N){
int x=read(),y=read();
insert(x,y);
insert(y,x);
}
}
void TreeDP(int node,int fa){
f[node][]=;ll sum=;
for(int i=LINK[node];i;i=e[i].next)if(e[i].y!=fa){
TreeDP(e[i].y,node);
f[node][]+=f[e[i].y][];
f[node][]+=min(f[e[i].y][],min(f[e[i].y][],f[e[i].y][]));
sum+=min(f[e[i].y][],f[e[i].y][]);
}
f[node][]=oo;
for(int i=LINK[node];i;i=e[i].next)if(e[i].y!=fa){
f[node][]=min(f[node][],sum-min(f[e[i].y][],f[e[i].y][])+f[e[i].y][]);
}
}
void output(){
cout<<min(f[][],f[][])<<endl;
}
}
int main(){
//freopen("input.in","r",stdin);
using namespace solution;
init();
TreeDP(,);
output();
;
}
POJ3659 [usaco2008jan_gold]电话网络的更多相关文章
- poj2436,poj3659,poj2430
这两题都体现了dp的核心:状态 dp做多就发现,状态一设计出来,后面的什么都迎刃而解了(当然需要优化的还要动动脑筋): 先说比较简单的: poj2436 由题得知病毒种数<=15很小,于是我们就 ...
- BZOJ1596: [Usaco2008 Jan]电话网络
1596: [Usaco2008 Jan]电话网络 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 513 Solved: 232[Submit][S ...
- poj3659树状DP
Cell Phone Network Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6273 Accepted: 225 ...
- 1596: [Usaco2008 Jan]电话网络
1596: [Usaco2008 Jan]电话网络 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 601 Solved: 265[Submit][S ...
- 3336 /P1948电话网络(二分答案)
3336 电话网络 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 由于地震使得连接汶川县城电话线全部损坏,假如你是 ...
- 10.22~10.28一周经典题目整理(meeting,BZOJ4377,POJ3659)
meeting:给正n边形每个点染上黑色或者白色,问有多少个同色的等腰三角形. 以正五边形为例这里将最上面的点作为顶点,得到若干对相等的腰 ,注意到以最上面的点作为顶点的等腰三角形的个数,等于颜色相等 ...
- 【bzoj1596】[Usaco2008 Jan]电话网络
题目描述 Farmer John决定为他的所有奶牛都配备手机,以此鼓励她们互相交流.不过,为此FJ必须在奶牛们居住的N(1 <= N <= 10,000)块草地中选一些建上无线电通讯塔,来 ...
- POJ3659 Cell Phone Network(树上最小支配集:树型DP)
题目求一棵树的最小支配数. 支配集,即把图的点分成两个集合,所有非支配集内的点都和支配集内的某一点相邻. 听说即使是二分图,最小支配集的求解也是还没多项式算法的.而树上求最小支配集树型DP就OK了. ...
- BZOJ 1596: [Usaco2008 Jan]电话网络
Description Farmer John决定为他的所有奶牛都配备手机,以此鼓励她们互相交流.不过,为此FJ必须在奶牛们居住的N(1 <= N <= 10,000)块草地中选一些建上无 ...
随机推荐
- jQuery 插件编程精讲与技巧
适应的读者: 1.有一定的jquery编程基础但是想在技能上有所提升的人 2.前端开发的程序员 3.对编程感兴趣的学生 为什么要学习jquery插件的编写? 为什么要学习jquery插件的编写?相信这 ...
- Bootstrap系列 -- 5. 文本对齐方式
一. 文本对齐样式 .text-left:左对齐 .text-center:居中对齐 .text-right:右对齐 .text-justify:两端对齐 二. 使用方式 <p class=&q ...
- SDRAM基础知识
SDRAM知识普及 在学习SDRAM之前,必须先了解"SDRAM"这个概念性的东西,并有感性的认识转变到一种理性的认识,所谓理性的认识就是实质性的东西…….不多说,相信你已经迫不急 ...
- 禁用Win10显卡更新
右键This PC-Properties-Advanced system settings-选择Hardware这个tab-Device installation settings选择No
- bat批处理文件启动Eclipse和ivy本地仓库的配置
一.bat批处理文件启动Eclipse 所需文件: 1.eclipse 2.jre 3.startup-eclipse.bat 确保以上三个文件夹同级 startup-eclipse.bat: set ...
- oracle 10g编程
一.概述 1.sql语言特点 sql语言采用集合操作方式,对数据的处理是成组进行的,而不是一条一条处理,听过使用集合操作方式,可以家加快数据的处理速度. 执行sql语句时每次只能发送并处理一条语句.如 ...
- Android四大组件之Activity详解——传值和获取结果
废话不多说,先来看效果图 项目源码: http://download.csdn.net/detail/ginodung/8331535 程序说明: 在MainActivity中输入用户名和密码,然后提 ...
- springMVC学习--RESTful支持
简介 RESTful架构,就是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用.RESTful(即Representational State T ...
- Thinkphp url 除去index.php
例如你的原路径是 http://localhost/test/index.php/index/add那么现在的地址是 http://localhost/test/index/add如何去掉index. ...
- 云平台 为什么推荐使用小VM 而不是大VM独占宿主机的方式部署游戏服?
近期公司X游戏项目,提了一个游戏VM资源的需求,是 64GB RAM + 30Core CPU 的VM规格,而一个VM部署10个游戏服.而我们云平台推荐的VM规格为 4 Core CPU + 4GB ...