#include<cstdio>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdlib.h>
#include<math.h>
#include<vector>
#include<iomanip>
using namespace std;
int dp[220][2],dup[220][2];
char name[220][110],st1[110],st2[110];
vector<int> f[220];
int k;
int search(char p[])
{
int i;
for(i=1;i<=k;i++)
if(strcmp(p,name[i])==0)
return i;
k++;
strcpy(name[k],p);
return k;
}
void dfs(int v)
{
if(f[v].size()==0)
{
dp[v][0]=0;
dp[v][1]=1;
dup[v][0]=dup[v][1]=-1;
}
else
{
int i;
for(i=0;i<f[v].size();i++)
{
int u=f[v][i];
dfs(u);
dp[v][1]+=dp[u][0];
dp[v][0]+=max(dp[u][0],dp[u][1]);
if((dp[u][0]>dp[u][1]&&dup[u][0]==0)||(dp[u][0]<dp[u][1]&&dup[u][1]==0)||(dp[u][0]==dp[u][1]))
dup[v][0]=0;
if(dup[u][0]==0)
dup[v][1]=0;
}
dp[v][1]++;
}
}
int main()
{
int i,j;
int n;
while(1)
{
cin>>n;
if(n==0) break;
for(i=0;i<=n;i++)
f[i].clear();
k=1;
int t1,t2;
cin>>name[1];
for(i=1;i<n;i++)
{
cin>>st1>>st2;
t1=search(st1);
t2=search(st2);
f[t2].push_back(t1);
}
memset(dup,-1,sizeof(dup));
memset(dp,0,sizeof(dp));
dfs(1);
if(dp[1][0]>dp[1][1]&&dup[1][0]==-1)
printf("%d Yes\n",dp[1][0]);
else if(dp[1][0]<dp[1][1]&&dup[1][1]==-1)
printf("%d Yes\n",dp[1][1]);
else
printf("%d No\n",max(dp[1][1],dp[1][0]));
}
//system("pause");
}
hdu-2412-Party at Hali-Bula
最新推荐文章于 2022-11-03 22:48:41 发布