BZOJ4346 : [POI2016]Nadajniki
设$f[x][j]$表示$x$点不放无线,它的儿子里放了$j$个无线,且对$x$的父亲不作要求时的最小代价。
$g[x][j]$表示$x$点不放无线,要求$x$的父亲至少放$j$个无线时的最小代价。
$h[x][j]$表示$x$点放了$j$个无线时的最小代价。
然后从底向上树形DP即可,时间复杂度$O(n)$。
#include<cstdio>
#define rep(i,n) for(int i=0;i<n;i++)
const int N=200010,M=400010;
int n,i,x,y,G[N],v[M],nxt[M],ed,f[N][3],g[N][2],h[N][2],old[N][3][3],tmp[3][3],ans;
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
inline int min(int a,int b){return a<b?a:b;}
inline int max(int a,int b){return a>b?a:b;}
inline void up(int&a,int b){if(a>b)a=b;}
inline void add(int x,int y){v[++ed]=y;nxt[ed]=G[x];G[x]=ed;}
void dfs(int x,int y){
h[x][0]=1,h[x][1]=2;
rep(a,3)f[x][a]=M;
rep(a,3)rep(b,3)old[x][a][b]=M;old[x][0][0]=0;
for(int i=G[x],u;i;i=nxt[i])if(v[i]!=y){
dfs(u=v[i],x);
int t=min(min(h[u][0],h[u][1]),g[u][0]);
rep(a,3)up(t,f[u][a]);
h[x][0]+=t;
h[x][1]+=min(t,g[u][1]);
rep(a,3)rep(b,3)tmp[a][b]=M;
rep(a,3)rep(b,3){
rep(c,3)up(tmp[a][max(b,2-c)],old[x][a][b]+f[u][c]);
rep(c,2)up(tmp[min(a+c+1,2)][b],old[x][a][b]+h[u][c]);
}
rep(a,3)rep(b,3)old[x][a][b]=tmp[a][b];
}
rep(a,3)rep(b,a+1)up(f[x][a],old[x][a][b]);
g[x][0]=min(old[x][0][1],old[x][1][2]);
g[x][1]=old[x][0][2];
}
int main(){
read(n);
for(i=1;i<n;i++)read(x),read(y),add(x,y),add(y,x);
dfs(1,0);
ans=min(h[1][0],h[1][1]);
rep(i,3)up(ans,f[1][i]);
return printf("%d",ans),0;
}
BZOJ4346 : [POI2016]Nadajniki的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- bzoj 4347 [POI2016]Nim z utrudnieniem DP
4347: [POI2016]Nim z utrudnieniem Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 733 Solved: 281[Su ...
- 【BZOJ4345】[POI2016]Korale 堆(模拟搜索)
[BZOJ4345][POI2016]Korale Description 有n个带标号的珠子,第i个珠子的价值为a[i].现在你可以选择若干个珠子组成项链(也可以一个都不选),项链的价值为所有珠子的 ...
- [bzoj4345][POI2016]Korale_堆_贪心_线段树_dfs
bzoj4345 POI2016 Korale 题目链接:https://lydsy.com/JudgeOnline/problem.php?id=4345 数据范围:略. 题解: 由于$k$的范围问 ...
- BZOJ4348 : [POI2016]Park wodny
首先特判全部都是A或者全部都是B或者$n=1$的情况. 然后把矩阵四周都填充上A,枚举一个块,分以下情况讨论: 1.在它四周选两个块扩展,此时平方暴力枚举即可. 2.在它四周选定一个方向扩展两步. 3 ...
- BZOJ4347 : [POI2016]Nim z utrudnieniem
将石子从小到大排序,然后DP. 设$f[i][j][k]$表示考虑了前$i$堆的石子,当前扔掉的堆数模$d$为$j$,没有扔掉的石子的异或和为$k$的方案数. 因为石子排过序,所以转移的复杂度为$O( ...
- BZOJ4345 : [POI2016]Korale
只考虑第一问,将珠子按照价值从小到大排序,设排序后第$i$小的为$b[i]$,定义二元组$(x,y)$表示当前珠子的总价值为$x$,用的价值最大的珠子为$y$,用一个小根堆来维护所有状态.一开始往堆中 ...
- bzoj 4345: [POI2016]Korale
Description 有n个带标号的珠子,第i个珠子的价值为a[i].现在你可以选择若干个珠子组成项链(也可以一个都不选),项链的价值为所有珠子的价值和.现在给所有可能的项链排序,先按权值从小到大排 ...
- [POI2016]Nim z utrudnieniem
Description A和B两个人玩游戏,一共有m颗石子,A把它们分成了n堆,每堆石子数分别为a[1],a[2],...,a[n],每轮可以选择一堆石子,取掉任意颗石子,但不能不取.谁先不能操作,谁 ...
随机推荐
- 用Lucene检索数据库
http://blog.sina.com.cn/s/blog_82ac67c101012r9z.html package com.javabean; import java.io.File;impor ...
- 【Python】Django支持事务方式
代码: with transaction.atomic(): for i in xrange(int(svc_instance_num)): tmp_fileprotect_svc_instance ...
- Unique Binary Search Trees I & II
Given n, how many structurally unique BSTs (binary search trees) that store values 1...n? Example Gi ...
- 使用kettle转换中的JavaScript对密码进行加密和解密
日常开发中,为了确保账号和密码的安全,时常要对密码进行加密和解密.然而kettle是怎么对密码进行加密和解密的呢? 下面的代码需要再转换中的JavaScript中运行. var encrypted_p ...
- Light OJ 1296 - Again Stone Game (博弈sg函数递推)
F - Again Stone Game Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu ...
- sublime text 3 使用过程总结记录
自定义的设置: "save_on_focus_lost": true //在文件失去焦点的时候自动保存
- Tomcat 解决The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit
解法: 修改tomcat下的web.xml, 搜索:JspServlet, 增加: <init-param> <param-name>mappedfile</pa ...
- 2016国产开源软件TOP100(Q1)
随着互联网的发展.开放标准的普及和虚拟化技术的应用等诸多IT新领域的创新及拓展,开源技术凭借其开放性.低成本.稳定性.灵活性.安全性和技术创新性等特点迅速走向成熟,逐步发展成为一种主流模式,日益改变着 ...
- PHP常用类型判断函数
1.gettype():获取变量类型 2.is_array():判断变量类型是否为数组类型 3.is_double():判断变量类型是否为倍浮点类型 4.is_float():判断变量类型是否为浮点类 ...
- Java Hour 46 SLF4J
SLF4J(Simple Logging Facade for Jave). 上个章节在配置启动项目后,会报一个奇怪的错误,一开始以为是Maven 依赖有冲突,其实是和slf4j 密切相关的. 本文原 ...