#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int vis[1510],father[1510],dp[1510][2],num;
void dfs(int node)
{
vis[node]=1;
dp[node][1]=1;
for(int i=0;i<num;i++)
{
if(!vis[i]&&father[i]==node)
{
dfs(i);
dp[node][1]+=min(dp[i][1],dp[i][0]);
dp[node][0]+=dp[i][1];
}
}
}
int main()
{
while(~scanf("%d",&num))
{
memset(vis,0,sizeof(vis));
memset(father,-1,sizeof(father));
memset(dp,0,sizeof(dp));
int root=-1;
for(int i=1;i<=num;i++)
{
int first,second;
scanf("%d:(%d)",&first,&second);
if(second)
{
for(int k=1;k<=second;k++)
{
int temp;
scanf("%d",&temp);
father[temp]=first;
}
if(father[first]==-1)
root=first;
}
}
dfs(root);
cout<<min(dp[root][1],dp[root][0])<<endl;
}
return 0;
}
Strategic game POJ - 1463
最新推荐文章于 2020-01-09 17:15:03 发布