poj - 3342 Party at Hali-Bula
2012-11-08 23:12
211 查看
树形DP,还是求最大独立集,加上判断唯一性,这题我就卡在唯一性上了。
#include <stdio.h> #include <string.h> #define N 205 int fst ,nxt ,v ,n,m; int only [2],dp [2]; char name [105]; int max(int a, int b) { return a>b ?a :b; } int find(char *t) { for(int i = 0; i < m; i++) if(!strcmp(name[i],t)) return i; return -1; } void dfs(int u) { int e,i; dp[u][0] = 0; dp[u][1] = 1; only[u][0] = only[u][1] = 1; for(i = fst[u]; i != -1; i = nxt[i]) { e = v[i]; dfs(e); dp[u][0] += max(dp[e][0],dp[e][1]); if(dp[e][0]==dp[e][1]) only[u][0] = 0; else if((dp[e][0] > dp[e][1]) && only[u][0]) only[u][0] = only[e][0]; else if(only[u][0]) only[u][0] = only[e][1]; dp[u][1] += dp[e][0]; if(only[u][1]) only[u][1] = only[e][0]; } //printf("dp[%d][0]: %d\ndp[%d][1]: %d\n",u,dp[u][0],u,dp[u][1]); } int main() { int i,u; char s[105],t[105]; while(scanf("%d",&n),n) { memset(fst,-1,sizeof fst); scanf("%s",name[0]); for(i = m = 1; i < n; i++) { scanf("%s %s",s,t); u = find(t); v[i] = find(s); if(u == -1) u = m, strcpy(name[m++],t); if(v[i] == -1) v[i] = m, strcpy(name[m++],s); nxt[i] = fst[u]; fst[u] = i; } dfs(0); if(dp[0][0] > dp[0][1]) { printf("%d ",dp[0][0]); printf(only[0][0] ?"Yes\n" :"No\n"); } else if(dp[0][0] < dp[0][1]) { printf("%d ",dp[0][1]); printf(only[0][1] ?"Yes\n" :"No\n"); } else printf("%d No\n",dp[0][1]); } return 0; }
相关文章推荐
- 树形DP_____Party at Hali-Bula( POJ 3342 )
- POJ 3342 Party at Hali-Bula / HDU 2412 Party at Hali-Bula / UVAlive 3794 Party at Hali-Bula / UVA 1220 Party at Hali-Bula(树型动态规划)
- [poj 3342]Party at Hali-Bula 树形dp
- POJ 3342 Party at Hali-Bula / HDU 2412 / UVAlive 3794 / UVA 1220
- POJ 3342 - Party at Hali-Bula 树形DP+最优解唯一性判断
- POJ 3342 Party at Hali-Bula (树形dp 树的最大独立集 判多解 好题)
- POJ 3342 Party at Hali-Bula(树形DP)
- poj&nbsp;3342&nbsp;Party&nbsp;at&nbsp;Hali-Bula&nbsp;(树…
- poj 3342 Party at Hali-Bula(树形dp)
- POJ 3342 Party at Hali-Bula
- POJ_3342_Party at Hali-Bula_树形DP
- poj 3342 Party at Hali-Bula(树形dp)
- POJ 3342 Party at Hali-Bula
- POJ - 3342 - Party at Hali-Bula (树形dp + 判断唯一解)
- POJ3342——Party at Hali-Bula
- POJ 3342 Party at Hali-Bula 树形DP 最大独立集
- poj 3342 Party at Hali-Bula(树形DP+判断方式是不是唯一)
- 树形动态规划 POJ 3342 Party at Hali-Bula
- POJ_3342_Party_at_Hali-Bula
- poj 3342 Party at Hali-Bula 树状dp