首页 > 其他分享 >【做题笔记】树形 dp

【做题笔记】树形 dp

时间:2023-03-31 17:48:20浏览次数:60  
标签:ch int rint 笔记 read 树形 dp define

1. luoguP2016 战略游戏

1.1 Solve

设计状态 \(dp[i][0/1]\) 表示在 \(i\) 子树内, 放/不放 第 \(i\) 个节点使其合法所需的最少的士兵数目。则有:

  1. 不选 \(i\) 节点,则 \(i\) 的儿子必须选;
  2. 选 \(i\) 节点,则 \(i\) 的儿子可选可不选;

因此,转移方程为:

$dp[i][0] = \sum dp[son[i]][1]$

\(dp[i][1] = \sum \min(dp[son[i]][0], dp[son[i]][1])\)

1.2 Code

#include <bits/stdc++.h>
#define int long long
#define H 19260817
#define rint register int
#define For(i,l,r) for(rint i=l;i<=r;++i)
#define FOR(i,r,l) for(rint i=r;i>=l;--i)
#define MOD 1000003
#define mod 1000000007

using namespace std;

inline int read() {
  rint x=0,f=1;char ch=getchar();
  while(ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
  while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
  return x*f;
}

void print(int x){
  if(x<0){putchar('-');x=-x;}
  if(x>9){print(x/10);putchar(x%10+'0');}
  else putchar(x+'0');
  return;
}

const int N = 1e5;

vector<int> e[N];

int n, f[N][2]; 

void dfs(int x, int fa) {
  f[x][0] = f[x][1] = 0;
  for (int i = 0; i < e[x].size(); i++) {
    int y = e[x][i];
    if(y == fa) continue;
    dfs(y, x);
    f[x][0] += f[y][1];
    f[x][1] += min(f[y][0], f[y][1]);
  }
  f[x][1]++; 
}

signed main() {
  n = read();
  For(i,1,n) {
    int x = read(), k = read();
    For(j,1,k) {
      int y = read();
      e[x].push_back(y);
      e[y].push_back(x);
    }
  }
  dfs(0, -1);
  cout << min(f[0][0], f[0][1]) << '\n';
  return 0; 
}
/*
8
0 2 1 2
1 2 3 4
2 0
3 0
4 1 5
5 2 6 7
6 0
7 0
*/

标签:ch,int,rint,笔记,read,树形,dp,define
From: https://www.cnblogs.com/Daniel-yao/p/17276941.html

相关文章

  • kafka学习笔记
    一、初识kafkakafka的数据单元被称为消息,为了提高效率,消息会被分批次写入kafka,批次就是一组消息,这些消息属于同一个主题和分区。批次数据会被压缩,这样可以提升数据的传输和存储能力,但要做更多的计算处理。kafka的消息通过主题进行分类,主题可以被分为若干个分区,消息以追......
  • gulp笔记 2 (进阶一点点:使用bower来管理前端依赖)
    其实gulp比例1中的内容已经基本满足开发要求了。此文为进阶的一点点知识#1 安装bower(bower是个纯web前端依赖管理工具。)   npminstall-gbower #版本为1.8.14,必须安装在全局   bowerinit#会生成一个bower.json文件,选项寂寞默认就行,bower的库户自动放到bowe......
  • wordpress的dockercompose部署方式
    version:'3.1'services:wordpressastra:image:wordpressrestart:alwaysports:-8082:80environment:WORDPRESS_DB_HOST:dbastraWORDPRESS_DB_USER:exampleuserWORDPRESS_DB_PASSWORD:examplepass......
  • 洛谷 P5642 - 人造情感(换根 dp)
    想起来很轻松,写起来很酸爽的套路题。默认以\(1\)为根。先考虑怎么算单个\(f(u,v)\),我们定义一个连通块的权值为从该连通块中选出若干条点不相交的路径,选出的路径的权值之和的最大值。那么显然\(f(u,v)\)就是整棵树的权值\(-\)挖掉\((u,v)\)这条路径后各个连通块的权值之......
  • 有关wordpress文章页面出现404的问题
    有关wordpress文章页面出现404的问题修复的时候总结了一下原因:1.未开启apache的rewrite功能2..htaccess文件中的伪静态规则配置错误3.由于目录存在中文,编码问题导致解决方案:1.未开启apache的rewrite功能:使用命令sudoa2enmodrewrite开启mod_rewrite,然后修改配置文件......
  • docker wordpress 快速部署
    1.拉取mysqldockerpullmysql2.拉取wordpressdockerpullwordpress3.启动mysqldockerrun-d--namemysql-p3306:3306-eMYSQL_ROOT_PASSWORD=123456-v/data/mysql_data:/var/lib/mysqlmysql:latest4.启动wordpressdockerrun-d--namewordpress-v/da......
  • three.js 使用 getWorldPosition 获取世界坐标
    记录一下项目中的需求,组合后旋转,解组后需要模型位置为旋转后位置disCombinationModel(ModelArry,type){//判断是否有选中if(ModelArry.length===1){constob=ModelArry[0]//判断是否是组合if(ob.typeName==='combination'){......
  • 多卡并行训练框架(ddp) + 测评框架(支持多卡测评)
    一、多卡并行训练框架lightning-hydra-template这里主要使用github上开源框架lightning-hydra-template,但该框架存在一些小的问题,目前得到了解决。1.将github上lightning-hydra-template框架加入自己的仓库,然后从仓库中下载到服务器。2.修改src/utils/utils.py中的extras......
  • xrdp 更换gnome桌面环境为kde plasma
    需要修改的文件:/etc/xrdp/startwm.sh修改内容:SESSION="plasma"wm_start(){#Tocustomizesystem-wisesession,editthisfile.想全局生效,修改/etc/xrdp/startwm.sh#Tocustomizeuserspecificsession,copythisfileto$HOMEandeditit.想对指定系统用户生效,将/......
  • Git笔记
    问题:branchdiveragedPSC:\Users\s14my9\itcaml\configuration>gitcheckoutmastererror:youneedtoresolveyourcurrentindexfirstconfig/Bridger-Infra-Agent/common.libsonnet:needsmergeconfig/Bridger-Infra-Agent/uncontrolled/dev1.libsonnet:need......