#include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<iostream> #include<queue> #include<vector> #include<sstream> #include<cmath> #include<queue> #include<cctype> #include<set> #include<map> #include<unordered_set> using namespace std; int cur; map<string, int>m; vector<vector<int> >v; int ID(string s){ if(!m.count(s)) m[s] = cur++; return m[s]; } int d[202][2], f[202][2]; int dp(int i, int k){ d[i][k] = k; f[i][k] = 1; for(int j = 0; j < v[i].size(); j++){ if(k){ d[i][k] += dp(v[i][j],0); if(!f[v[i][j]][0]) f[i][k] = 0; } else{ d[i][k] += max(dp(v[i][j], 0),dp(v[i][j], 1)); if(d[v[i][j]][1] == d[v[i][j]][0] ) f[i][k] = 0; else if(d[v[i][j]][1] > d[v[i][j]][0] && !f[v[i][j]][1]) f[i][k] = 0; else if(d[v[i][j]][1] < d[v[i][j]][0] && !f[v[i][j]][0]) f[i][k] = 0; } } return d[i][k]; } int main(){ int n; string s; while(scanf("%d",&n)== 1 && n){ cin>>s; v.clear(); m.clear(); cur = 0; v.resize(n); ID(s); for(int i = 1;i < n; i++){ string a,b; cin>>a>>b; v[ID(b)].push_back(ID(a)); } printf("%d ",max(dp(0,0), dp(0,1))); if(d[0][0] == d[0][1]) cout<<"No"; else if(d[0][0] > d[0][1] && !f[0][0]) cout<<"No"; else if(d[0][0] < d[0][1] && !f[0][1]) cout<<"No"; else cout<<"Yes"; cout<<endl; } return 0; }
uva 1120
猜你喜欢
转载自blog.csdn.net/a874288174/article/details/80034079
今日推荐
周排行