例题 9-14 完美的服务 UVa 1218
2017-04-30 20:49
363 查看
#include<bits/stdc++.h> using namespace std; const int inf = 10010; int n; int dp[inf][3]; int vis[inf]; vector<int> son[inf]; void go(int rt){ vis[rt] = 1; dp[rt][0] = 1; dp[rt][1] = 0; dp[rt][2] = inf; queue<int> q; for(int i = 0; i < son[rt].size(); i++){ int ne = son[rt][i]; if(!vis[ne]){ go(ne); q.push(ne); dp[rt][0] += min(dp[ne][0], dp[ne][1]); dp[rt][1] += dp[ne][2]; } while(!q.empty()){ int ns = q.front(); q.pop(); dp[rt][2] = min(dp[rt][2], dp[rt][1] - dp[ns][2] + dp[ns][0]);//本来应枚举v然后再枚举v',dp(v', 2) + dp(v, 0),但之前dp(ne, 1)已经算过一部分了。 } /*for(int i = 0; i < son[rt].size(); i++){ int ns = son[rt][i]; dp[rt][2] = min(dp[rt][2], dp[rt][1] - dp[ns][2] + dp[ns][0]); }*///为何不能用这段? } } int main(){ int u, v; while(cin >> n && n != -1){ if(!n) continue; for(int i = 0; i <= n; i++) son[i].clear(); memset(vis, 0, sizeof(vis)); memset(dp, 0, sizeof(dp)); for(int i = 1; i < n; i++){ cin >> u >> v; son[u].push_back(v); son[v].push_back(u); } go(1); cout << min(dp[1][0], dp[1][2]) << endl; } return 0; }
相关文章推荐
- 例题9-14 UVA 1218 Perfect Service 完美的服务(树形dp)
- 【算法竞赛入门经典】树形DP的状态转移方程优化 例题9-14 UVa1218
- UVA 1218 完美服务 树形dp
- 树形DP(完美的服务,uva 1218)
- [UVa1218]完美服务
- UVa #1218 Perfect Service (例题9-14)
- uva 1218 完美的服务 dp
- 树上dp 完美的服务(py)(Perfect Service)(UVa 1218)题解
- Uva 1218 完美的服务
- UVa 1218 完美的服务
- UVA 1218 完美的服务
- 例题9-14 完美的服务 UVa1218
- 1218 - Perfect Service(完美服务)
- 例题7-14 网格动物(Lattice Animals, ACM/ICPC NEERC 2004, UVa1602)
- UVa816 例题 6-14 Abbott的复仇 (Abbott's Revenge,ACM/ICPC World Finals 2000)
- 【例题 7-14 UVA-1602】Lattice Animals
- 例题6-14 Abbott的复仇(Abbott's Revenge, ACM/ICPC World Finals 2000, UVa 816)
- 例题7-14 网格动物 UVa1602
- Uva1602 Lattice Animals 【枚举打表+形状判重】【例题7-14】
- 【算法竞赛入门经典】6.4.2用BFS求最短路 例题6-14 UVa816