宴会邀请,求最多能邀请多少人? 条件是具有主仆关系的人不能同时被邀请
代码:
#include<iostream>
#include<fstream>
#include<string>
#include<map>
using namespace std;
int n;
int g[201][201];
int dp[201][2];
string str1,str2;
void solve(int s){
int i,j,k;
dp[s][0]=0;
dp[s][1]=1;
for(i=1;i<=n;i++)
if(g[s][i])
{
solve(i);
dp[s][0]+=max(dp[i][0],dp[i][1]);
dp[s][1]+=dp[i][0];
}
}
void read(){
// ifstream cin("in.txt");
int i,j,k;
while(cin>>n){
if(n==0) return;
map<string,int> mp;
cin>>str1;
int cnt=1;
mp[str1]=cnt++;
memset(g,0,sizeof(g));
for(i=1;i<n;i++)
{
cin>>str1>>str2;
if(mp[str1]==0)
mp[str1]=cnt++;
if(mp[str2]==0)
mp[str2]=cnt++;
g[mp[str2]][mp[str1]]=1;
}
solve(1);
cout<<max(dp[1][0],dp[1][1])<<' ';
if(n==2)
{
cout<<"No"<<endl;
continue;
}
for(i=1;i<=n;i++)
{
if(dp[i][0]==dp[i][1])
{
for(j=1;j<=n;j++)
if(g[i][j]&&dp[j][0]==dp[j][1])
{
break;
}
if(j<=n) break;
}
}
if(i<=n) cout<<"No"<<endl;
else
cout<<"Yes"<<endl;
}
}
int main(){
read();
return 0;
}