P2016 战略游戏(树上 DP)
限制条件:
当前节点放,子节点可放可空。
当前节点空,子节点必须放。
有根无根没有影响,可以指定。
基本等价于 P1352。
#include<bits/stdc++.h>
using namespace std;
const int N=1509;
int n,dp[N][2];
vector<int> k[N];
void dfs(int i,int f){
dp[i][1]=1;
for(int j:k[i]) if(j!=f){
dfs(j,i);
dp[i][0]+=dp[j][1];
dp[i][1]+=min(dp[j][0],dp[j][1]);
}
}
int main(){
scanf("%d",&n);
for(int i=1,u,a,b;i<=n;i++){
scanf("%d%d",&u,&a);
while(a--) scanf("%d",&b),k[u].push_back(b),k[b].push_back(u);
}
dfs(0,-1),printf("%d\n",min(dp[0][0],dp[0][1]));
return 0;
}

浙公网安备 33010602011771号