hdu 1054 Strategic Game 树形dp

来源:互联网 发布:轻钢设计软件 编辑:程序博客网 时间:2024/04/30 13:38
#include<cstdio>#include<cstring>#include<vector>#include<algorithm>using namespace std;const int N =1505;vector<int>g[N];bool flag[N];int dp[N][2];void dfs(int root){if(g[root].size()==0){dp[root][0]=0;dp[root][1]=1;return;}int sum=0;for(int i=0;i<g[root].size();i++){int u=g[root][i];dfs(u);dp[root][0]+=dp[u][1];dp[root][1]+=min(dp[u][0],dp[u][1]);}dp[root][1]++;}int main(){int n;while(scanf("%d",&n)!=EOF){for(int i=0;i<n;i++){g[i].clear();}int num;int x;int u;memset(flag,0,sizeof(flag));for(int i=0;i<n;i++){scanf("%d:(%d)",&u,&num);while(num--){scanf("%d",&x);flag[x]=true;g[u].push_back(x);}}int root;for(int i=0;i<n;i++){if(flag[i]==false){root=i;break;}}memset(dp,0,sizeof(dp));dfs(root);printf("%d\n",min(dp[root][0],dp[root][1]));}return 0;}
复习下树形dp
0 0