设$f[x][j]$表示$x$点不放无线,它的儿子里放了$j$个无线,且对$x$的父亲不作要求时的最小代价。

$g[x][j]$表示$x$点不放无线,要求$x$的父亲至少放$j$个无线时的最小代价。

$h[x][j]$表示$x$点放了$j$个无线时的最小代价。

然后从底向上树形DP即可,时间复杂度$O(n)$。

  1. #include<cstdio>
  2. #define rep(i,n) for(int i=0;i<n;i++)
  3. const int N=200010,M=400010;
  4. 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;
  5. 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';}
  6. inline int min(int a,int b){return a<b?a:b;}
  7. inline int max(int a,int b){return a>b?a:b;}
  8. inline void up(int&a,int b){if(a>b)a=b;}
  9. inline void add(int x,int y){v[++ed]=y;nxt[ed]=G[x];G[x]=ed;}
  10. void dfs(int x,int y){
  11. h[x][0]=1,h[x][1]=2;
  12. rep(a,3)f[x][a]=M;
  13. rep(a,3)rep(b,3)old[x][a][b]=M;old[x][0][0]=0;
  14. for(int i=G[x],u;i;i=nxt[i])if(v[i]!=y){
  15. dfs(u=v[i],x);
  16. int t=min(min(h[u][0],h[u][1]),g[u][0]);
  17. rep(a,3)up(t,f[u][a]);
  18. h[x][0]+=t;
  19. h[x][1]+=min(t,g[u][1]);
  20. rep(a,3)rep(b,3)tmp[a][b]=M;
  21. rep(a,3)rep(b,3){
  22. rep(c,3)up(tmp[a][max(b,2-c)],old[x][a][b]+f[u][c]);
  23. rep(c,2)up(tmp[min(a+c+1,2)][b],old[x][a][b]+h[u][c]);
  24. }
  25. rep(a,3)rep(b,3)old[x][a][b]=tmp[a][b];
  26. }
  27. rep(a,3)rep(b,a+1)up(f[x][a],old[x][a][b]);
  28. g[x][0]=min(old[x][0][1],old[x][1][2]);
  29. g[x][1]=old[x][0][2];
  30. }
  31. int main(){
  32. read(n);
  33. for(i=1;i<n;i++)read(x),read(y),add(x,y),add(y,x);
  34. dfs(1,0);
  35. ans=min(h[1][0],h[1][1]);
  36. rep(i,3)up(ans,f[1][i]);
  37. return printf("%d",ans),0;
  38. }

  

BZOJ4346 : [POI2016]Nadajniki的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. bzoj 4347 [POI2016]Nim z utrudnieniem DP

    4347: [POI2016]Nim z utrudnieniem Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 733  Solved: 281[Su ...

  3. 【BZOJ4345】[POI2016]Korale 堆(模拟搜索)

    [BZOJ4345][POI2016]Korale Description 有n个带标号的珠子,第i个珠子的价值为a[i].现在你可以选择若干个珠子组成项链(也可以一个都不选),项链的价值为所有珠子的 ...

  4. [bzoj4345][POI2016]Korale_堆_贪心_线段树_dfs

    bzoj4345 POI2016 Korale 题目链接:https://lydsy.com/JudgeOnline/problem.php?id=4345 数据范围:略. 题解: 由于$k$的范围问 ...

  5. BZOJ4348 : [POI2016]Park wodny

    首先特判全部都是A或者全部都是B或者$n=1$的情况. 然后把矩阵四周都填充上A,枚举一个块,分以下情况讨论: 1.在它四周选两个块扩展,此时平方暴力枚举即可. 2.在它四周选定一个方向扩展两步. 3 ...

  6. BZOJ4347 : [POI2016]Nim z utrudnieniem

    将石子从小到大排序,然后DP. 设$f[i][j][k]$表示考虑了前$i$堆的石子,当前扔掉的堆数模$d$为$j$,没有扔掉的石子的异或和为$k$的方案数. 因为石子排过序,所以转移的复杂度为$O( ...

  7. BZOJ4345 : [POI2016]Korale

    只考虑第一问,将珠子按照价值从小到大排序,设排序后第$i$小的为$b[i]$,定义二元组$(x,y)$表示当前珠子的总价值为$x$,用的价值最大的珠子为$y$,用一个小根堆来维护所有状态.一开始往堆中 ...

  8. bzoj 4345: [POI2016]Korale

    Description 有n个带标号的珠子,第i个珠子的价值为a[i].现在你可以选择若干个珠子组成项链(也可以一个都不选),项链的价值为所有珠子的价值和.现在给所有可能的项链排序,先按权值从小到大排 ...

  9. [POI2016]Nim z utrudnieniem

    Description A和B两个人玩游戏,一共有m颗石子,A把它们分成了n堆,每堆石子数分别为a[1],a[2],...,a[n],每轮可以选择一堆石子,取掉任意颗石子,但不能不取.谁先不能操作,谁 ...

随机推荐

  1. Matlab实现线性回归和逻辑回归: Linear Regression & Logistic Regression

    原文:http://blog.csdn.net/abcjennifer/article/details/7732417 本文为Maching Learning 栏目补充内容,为上几章中所提到单参数线性 ...

  2. Vmware虚拟机

    1.在虚拟机安装完系统后找到相对应的保存路径如:D:\VMware\VOS\Win7x64OS 2.该目录下面会有很多文件和文件夹,其中配置文件Windows 7 x64.vmx和硬盘文件Window ...

  3. 暑假热身 B. 下载测速

    最近,nono终于结束了每年一次的为期12个月的冬眠,醒来的第一件事就是——看电影!!nono发现最近一年出现了各种很好很强大的电影,例如这个.这个.还有这个. 于是nono直接把这些电影全部扔进了下 ...

  4. 【Spring】Spring系列3之Spring AOP

    3.Spring AOP 3.1.AOP概述 3.2.前置通知 3.3.后置通知 3.4.返回通知.异常通知.环绕通知 3.5.指定切面优先级 3.6.重用切入点表达式 3.7.引入通知 3.8.基于 ...

  5. 在Java中>、>>、>>>三者的区别

    Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称.用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力 ...

  6. git_2-linux

    在linux下搭建git环境1.创建Github账号,https://github.com2.Linux创建SSH密钥: ssh-keygen  ##一直默认就可以了 3.将公钥加入到Github账户 ...

  7. Android手势锁实现

    最终效果如下 整体思路 a.自定义了一个RelativeLayout(GestureLockViewGroup)在里面会根据传入的每行的个数,生成多个GestureLockView(就是上面一个个小圈 ...

  8. Android之webView入门

    WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient setWebClient:主要 ...

  9. 态势感知 > 技术运维问题

    http://blog.csdn.net/sanmaoljh/article/details/52670226 http://u.sanwen.net/subject/250516.html http ...

  10. 在有EditText控件的AlertDialog对话框中自动弹出输入法

    我们先回顾一下创建AlertDialog的一般步骤. 一 inflate AlertDialog的布局文件   例如,其中dlg就是我们的布局文件.    View layout = LayoutIn ...