HDU 1054 Strategic Game(简单树形DP)

来源:互联网 发布:康亿点验钞机升级软件 编辑:程序博客网 时间:2024/04/30 14:49
题目太简单,懒得写解释了,直接存一份代码
#include<iostream>#include<cstdio>#include<vector>using namespace std;const int maxn=1505,inf=1<<30;int dp[maxn][2];int n,m;vector<int>G[maxn];void dfs(int u,int fa){    dp[u][1]=1;    dp[u][0]=0;    for(int i=0;i<G[u].size();i++)    {        int v=G[u][i];        if(v==fa) continue;        dfs(v,u);        dp[u][0]+=dp[v][1];        dp[u][1]+=min(dp[v][1],dp[v][0]);    }}int main(){    while(~scanf("%d",&n))    {        int rt=-1;        for(int i=0;i<=n;i++) G[i].clear();        //fill(&dp[0][0],&dp[maxn][0],inf);        for(int i=0;i<n;i++)        {            int from,to,m;            scanf("%d:(%d)",&from,&m);            if(rt==-1) rt=from;            while(m--)            {                scanf("%d",&to);                G[from].push_back(to);            }        }        dfs(rt,-1);        int ans=min(dp[rt][0],dp[rt][1]);        printf("%d\n",ans);    }    return 0;}

0 0
原创粉丝点击