树形DP(Hali-Bula的晚会,uva 1220)
2016-09-20 20:01
357 查看
#include<bits/stdc++.h> #define maxn 210 #define INF 0X3F3F3F3F using namespace std; int n; map<string,int>ID; vector<int>MAP[maxn]; int cnt; int dp[2][maxn]; int F[2][maxn]; void dfs(int u,int f) { for(unsigned int i=0;i<MAP[u].size();i++) dfs(MAP[u][i],u); dp[1][u]++; if(f>=1) { dp[1][f]+=dp[0][u]; if(F[0][u]==0) F[1][f]=0; if(dp[0][u]==dp[1][u]) { dp[0][f]+=dp[0][u]; F[0][f]=0; } else if(dp[0][u]>dp[1][u]) { dp[0][f]+=dp[0][u]; if(F[0][u]==0) F[0][f]=0; } else { dp[0][f]+=dp[1][u]; if(F[1][u]==0) F[0][f]=0; } }; } int main() { while(scanf("%d",&n),n) { for(int i=0;i<maxn;i++) F[0][i]=F[1][i]=1; memset(dp,0,sizeof(dp)); for(int i=0;i<maxn;i++) MAP[i].clear(); cnt=0; ID.clear(); string u,v; cin>>u; ID[u]=++cnt; for(int i=1;i<n;i++) { cin>>v>>u; if(!ID[v]) ID[v]=++cnt; if(!ID[u]) ID[u]=++cnt; MAP[ID[u]].push_back(ID[v]); } dfs(1,0); if(dp[0][1]==dp[1][1]) printf("%d No\n",dp[0][1]); else if(dp[0][1]>dp[1][1]) { printf("%d ",dp[0][1]); if(F[0][1]) puts("Yes"); else puts("No"); } else { printf("%d ",dp[1][1]); if(F[1][1]) puts("Yes"); else puts("No"); } } return 0; }
相关文章推荐
- 紫书动规 例题9-13 UVA - 1220 Party at Hali-Bula 树形dp
- UVA 1220 Party at Hali-Bula (树形dp--树的最大独立集)
- UVA1220Party at Hali-Bula(树形dp)
- UVA 1220 Party at Hali-Bula (树形DP)
- 100道动态规划——36 UVA 1220 Party at Hali-Bula 树形DP 最大独立集 思考欠妥
- uva 1220 - Party at Hali-Bula 【入门树形dp】
- uva 1220 ,Patty at Hali-Bula 树形dp 树上最大独立集 并判断是否唯一
- UVA - 1220 Party at Hali-Bula(树形dp)
- UVA 1220 / HDOJ 2412 Party at Hali-Bula 树形DP
- UVa - 1220 - Party at Hali-Bula ( 树形DP 求最大独立集 )
- Party at Hali-Bula(UVA - 1220) 树形dp 最大独立集
- uva1220Party at Hali-Bula(树形dp)
- Party at Hali-Bula UVA - 1220 (简单树形dp)
- UVA - 1220 Party at Hali-Bula 树形DP入门
- UVa 1220 Party at Hali-Bula (树形DP,最大独立集)
- uva 1220 Party at Hali-Bula 树形DP
- 【UVa1220】Party at Hali-Bula(树形DP)
- UVA 1220 Party at Hali-Bula——dp
- UVA 1220 Hali-Bula的晚会
- Hali-Bula的晚会(UVa1220)详细题解