战略游戏--树形dp
1.与没有上司的舞会类似,但没有上司的舞会要多考虑一种儿子全都没来的情况,但这里不存在,因为要实现覆盖,不能不管儿子孙子
2.状态:安or不安
3.边界:叶子
4.转移:dp[u][1]///安了+=min(dp[v][0],dp[v][1],儿子都可以,选最小
dp[u][0]=sum(dp[v][1],没安那么儿子一定要安
P2016 战略游戏 - 洛谷
https://blog.csdn.net/2301_80422662/article/details/148059280?spm=1011.2124.3001.6209
#include<bits/stdc++.h>
using namespace std;
#define N 100011
typedef long long ll;
int n;
int dp[1611][2];
bool bo[1611];
vector<int> mp[1611];
void dfs(int u)
{bo[u]=true;dp[u][1]=1;for(int v:mp[u]){if(!bo[v]){dfs(v);dp[u][0]+=dp[v][1];dp[u][1]+=min(dp[v][1],dp[v][0]);}}
}
int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n; for(int i=0;i<n;i++){int x,k;cin>>x>>k;for(int j=0;j<k;j++){int y;cin>>y;mp[x].push_back(y);mp[y].push_back(x);}}dfs(0);cout<<min(dp[0][0],dp[0][1]);return 0;
}