E68 树形DP P2016 战略游戏
视频链接:E68 树形DP P2016 战略游戏_哔哩哔哩_bilibili
E17 树形DP P1352 没有上司的舞会 - 董晓 - 博客园 (cnblogs.com)
P2016 战略游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
// 树形DP O(n) #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N=1505; int idx,head[N],to[N<<1],ne[N<<1]; void add(int u,int v){ to[++idx]=v;ne[idx]=head[u];head[u]=idx; } int n,m,f[N][2]; //0不放士兵 1放士兵 void dfs(int u,int fa){ f[u][1]=1; for(int i=head[u];i;i=ne[i]){ int v=to[i]; if(v==fa) continue; dfs(v,u); f[u][0]+=f[v][1]; f[u][1]+=min(f[v][0],f[v][1]); } } int main(){ scanf("%d",&n); for(int i=1,a,b,k;i<=n;i++){ scanf("%d%d",&a,&k); a++; for(int j=1;j<=k;j++){ scanf("%d",&b); b++; add(a,b);add(b,a); } } dfs(1,0); printf("%d",min(f[1][0],f[1][1])); }