uva 1218 Perfect Service 树形dp
2015-11-02 18:26
375 查看
// uva 1218 Perfect Service 树形dp // // 解题思路: // // d[u][0]表示节点本身是服务器 // d[u][1]表示节点的父节点是服务器 // d[u][2]表示节点的孩子是服务器 // d[u][0] = sigma(d[v][0],d[v][1]); // 自己是服务器,那么孩子可以是服务器 // // 也可以不是服务器 // d[u][1] = sigma(d[v][2]); // 父亲是服务器,那么本身就不用了,只要孩子 // // 的孩子是服务器.这样是最优的 // d[u][2] = min(d[u][1] - d[v][2] + d[v][0]) // 只要一个孩子是服务器就可以了 // // 整体感悟: // // 这道题看了很久很久,有一年了吧,对于d[u][0]很好理解,d[u][1]也挺好理解 // 对于d[u][2]理解一直不够,但是忽然就恍然大悟,只要一个孩子节点的孩子有服务器就 // 可以啦,其他都不必.过程是很痛苦的,但是最后发现自己理解以后,还是挺好理解的 // 继续加油吧~~~~FIGHTING!!! #include <cstring> #include <algorithm> #include <iostream> #include <cstdio> #include <cmath> #include <string> #include <vector> #include <queue> #define For(x,a,b,c) for (int x = a; x <= b; x += c) #define Ffor(x,a,b,c) for (int x = a; x >= b; x -= c) #define cls(x,a) memset(x,a,sizeof(x)) using namespace std; typedef long long ll; const double PI = acos(-1.0); const double EPS = 1e-10; const int MAX_N = 10000 + 8; const int INF = 10009; int N,M; vector<int> g[MAX_N]; int d[MAX_N][3]; void input(){ for (int i = 1;i <= N;i ++) g[i].clear(); for (int i = 1;i < N;i ++){ int u,v; scanf("%d%d",&u,&v); g[u].push_back(v); g[v].push_back(u); } } void DP(int u,int fa){ d[u][0] = 1; d[u][1] = 0; d[u][2] = INF; for (int i = 0;i < g[u].size(); i++){ int v = g[u][i]; if (v == fa) continue; DP(v,u); d[u][0] += min(d[v][0],d[v][1]); d[u][1] += d[v][2]; } for (int i = 0 ; i< g[u].size();i ++){ int v = g[u][i]; if (v == fa) continue; d[u][2] = min(d[u][2],d[u][1] - d[v][2] + d[v][0]); } } void solve(){ DP(1,-1); printf("%d\n",min(d[1][0],d[1][2])); } int main(){ //freopen("1.in","r",stdin); while(scanf("%d",&N)){ input(); solve(); int x; scanf("%d",&x); if (x == -1) break; } return 0; }
相关文章推荐
- 树形DP 或 最小顶点覆盖=最大匹配(双向图)(HDU 1053)
- [BZOJ1017][JSOI2008][树形DP]魔兽地图DotR
- ZOJ3824 Fiber-optic Network
- hihocoder #1035 : 自驾旅行 III 树形DP
- POJ 3342
- URAL1018
- hdu1561 zoj3201
- poj 3107 Godfather
- zoj3201Tree of Tree
- Codeforces Round #135 (Div. 2)VD. Choosing Capital for Treeland
- POJ 1848 Tree
- 树形dp简单总结
- Party at Hali-Bula
- zoj cut the tree(树形dp,小细节真的很多)
- poj 2486 Apple Tree(树形dp)
- poj 1155 TELE(树形泛化背包dp)
- 树形DP
- HDU 1520 Anniversary party (树形dp) 解题报告
- POJ 1463 Strategic game (树形DP) 解题报告
- hdu 1561 树形dp+背包+dfs