Strategic game UVA - 1292

dp[u][0] += dp[v][1]; dp[u][1] += min(dp[v][0], dp[v][1]);

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>

using namespace std;
const int N=2e3;
int n,vis[N],x,y,num,dp[N][2];
vector<int> a[N];

void dfs(int x)
{
    vis[x]=1;
    dp[x][0]=0;
    dp[x][1]=1;
    for(int i=0;i<a[x].size();i++)
    {
        int y=a[x][i];
        if(vis[y])
            continue;
        dfs(y);
        dp[x][0]+=dp[y][1];
        dp[x][1]+=min(dp[y][0],dp[y][1]);
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    while(scanf("%d",&n)!=EOF)
    {
        memset(vis,0,sizeof(vis));
        for(int i=0;i<n;i++)
            a[i].clear();
        for(int i=0;i<n;i++)
        {
            scanf("%d:(%d)",&x,&num);
            while(num--)
            {
                scanf("%d",&y);
                a[x].push_back(y);
                a[y].push_back(x);
            }
        }
        dfs(0);
        cout << min(dp[0][0],dp[0][1]) << endl;
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章