uva 10859
来源:互联网 发布:amp网络语言是什么意思 编辑:程序博客网 时间:2024/05/22 03:09
参考厚白书
题意:有一个城市需要安装灯,只能安装在节点。每一个节点的灯可以照亮与节点相连的街道。
给你n个点和m条由节点组成的街道。(不会有环和重复)。求最小的安装数量,和在安装数最小的条件下尽量多有不止被一个灯照亮的街道。
只能佩服厚白书的无边法力,我们可以给灯的权重赋一个较大值,给被一个灯单独照亮的街道赋一个较小值,这样求满足要求的最小值就可以了。
dp时的状态转移要考虑,若父节点有灯,那么这个节点可以安灯可以安。
若父节点没有,那么一定要安。
考虑是否一个灯的时候需要注意:是两个点决定一条街道,所以,我们考虑子节点(因为从父节点开始记忆化搜索)。
#include<cstdio>#include<vector>#include<cstring>using namespace std;const int maxn = 1000 + 5;const int M = 3000;vector<int> sons[maxn];bool vis[maxn][2];int d[maxn][2];int DP(int i, int j, int f){ if(vis[i][j]) return d[i][j]; vis[i][j] = 1; int &ans = d[i][j]; ans = M; for(int k = 0; k < sons[i].size(); k++) { if(sons[i][k] != f) ans += DP(sons[i][k], 1, i); } if(!j && f != -1) ans++;//这个节点放灯,出现确定单个灯的情况只有父节点没灯且这个节点不是根。 if(j || f == -1) { int sum = 0; for(int k = 0; k < sons[i].size(); k++) { if(sons[i][k] != f) sum += DP(sons[i][k], 0, i); } if(f >= 0) sum++;//不放灯,出现单个灯的情况为,不为根节点。 ans = min(ans, sum); } return ans;}int main(){ int T; scanf("%d", &T); for(int kase = 0; kase < T; kase++) { int n, m; scanf("%d%d", &n, &m); for(int i = 0; i < n; i++) sons[i].clear(); memset(vis, 0, sizeof(vis)); for(int i = 0; i < m; i++) { int t1, t2; scanf("%d%d", &t1, &t2); sons[t1].push_back(t2); sons[t2].push_back(t1); } int ans = 0; for(int i = 0; i < n; i++) { if(!vis[i][0]) { ans += DP(i, 0, -1); } } printf("%d %d %d\n", ans / M, m - ans % M, ans % M); } return 0;}
阅读全文
0 0
- uva 10859
- uva 10859
- Uva-10859-Placing Lampposts
- UVA 10859 Placing Lampposts
- uva 10859 树形dp
- uva 10859 树形dp
- UVA 10859【树形dp】
- UVa 10859 Placing Lampposts
- UVa 10859 Placing Lampposts
- dp 专题系列(一)(UVa 10635,UVa 11825,UVa 10859,Uva LiveArchive 3882 )
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- 京东组建物流子集团 五年目标收入千亿
- 独家|依图创始人朱珑:即使AI过火,大家也可能低估了它的跳跃式进步
- 周航与乐视的600天 上演资本游戏恩怨情仇
- 大疆发布“飞行眼镜”,让你用头部控制无人机
- 特斯拉新车来临前调价,高端涨价低端打折
- uva 10859
- 学生管理系统(文件)
- 第三周实践项目8 以第一个元素为分界线,将所有小于它的元素移到该元素的前面,将所有大于它的元素移到该元素的后面。
- Spring源码剖析(三)事物隔离级别和传播属性复习
- 活动——在活动回收时怎么保存数据
- HTTP请求处理
- idea中无法启动tomcat,一直是卡住的状态
- Web前端开发笔试面试题
- Eclipse导入项目报错Target runtime com.genuitec.runtime.generic.jee70 is not defined.