UVA1218 - Perfect Service
2016-02-07 19:45
519 查看
1.d(0, u)表示u是服务器.
2.d(1, u)表示u的父节点是服务器.
3.d(2, u)表示u和u的父节点都不是服务器
状态转移方程:
v是u的子节点
d(0, u) = sum(min(d(0, v), d(1, v)));
d(1, u) = sum(d(2, v));
d(2, u) = min(d(2, u), d(1, u) - d(2, v) + d(0, v));
2.d(1, u)表示u的父节点是服务器.
3.d(2, u)表示u和u的父节点都不是服务器
状态转移方程:
v是u的子节点
d(0, u) = sum(min(d(0, v), d(1, v)));
d(1, u) = sum(d(2, v));
d(2, u) = min(d(2, u), d(1, u) - d(2, v) + d(0, v));
#include <iostream> #include <vector> #include <cstdio> #include <cstring> using namespace std; #define INF 1000000 #define maxn 10000 + 5 int d[3][maxn]; vector<int> v[maxn]; void dp(int n, int fa) { for(int i = 0; i < v .size(); i++) { int h = v [i]; if(h != fa){ dp(h, n); d[0] += min(d[0][h], d[1][h]); d[1] += d[2][h]; } } d[2] = INF; for(int i = 0; i < v .size(); i++) { int h = v [i]; if(h != fa){ d[2] = min(d[2] , d[1] - d[2][h] + d[0][h]); } } d[0] ++; } int main() { // freopen("in.txt", "r", stdin); int n; while(cin >> n) { for(int i = 1; i <= n; i++) v[i].clear(); for(int i = 1; i <= n - 1; i++) { int a, b; cin >> a >> b; v[a].push_back(b); v[b].push_back(a); } memset(d, 0, sizeof(d)); dp(1, -1); cout << min(d[0][1], d[2][1]) << endl; int m; cin >> m; if(m == -1) break; } return 0; }
相关文章推荐
- DOM对象控制HTML无素——详解2
- BZOJ 1653 USACO 2006 Feb Backward Digit Sums 全排列
- [转]fastjson
- CSS一些常用属性总结
- [转]JS中对象与字符串的互相转换
- css3 z-index属性
- Pure-Highlightjs – WordPress 代码高亮插件
- 流式计算-Jstorm提交Topology过程(上)
- Javacript和AngularJS中的Promises
- JQuery插件uriAnchor
- JavaScript高级程序设计学习笔记第六章--面向对象程序设计
- 2015-12-15 关于jquery mobile
- DOM对象控制HTML无素——详解1
- HTML5开发移动web应用——Sencha Touch篇(10)
- 【FE前端学习】第二阶段任务-基础
- 关于js中值的比较规则问题
- 在html在添加cookie和读取cookie
- jQuery-DOM操作
- BZOJ 1014: [JSOI2008]火星人prefix Splay+二分
- 离线安装CDH5集群及相关软件