Placing Lampposts ,UVa 10859 树形dp
UVa 10859
日常刷白书,第三次刷dp刷到这题,竟然还是不会写.....
这个题给定n个点m条边的无向无环图,有至多1000个节点,每个节点有两个状态,可以放灯或者不放灯,要求放最少的灯使得所有边被照亮且被两盏灯同时照亮的边数尽量大。
这个题直接写无从下手,但是可以把问题转化一下,转化为求最少的灯数a且只被一盏灯照亮的边数b尽量小,可以把目标转换成求x=Ma+c的最小值,M可取2000,设i节点放灯的值是d[i][1],不放灯是d[i][0],son表示子节点(多个)然后状态方程就是d[i][1]=2000+min(d[son][1],d[son][0]+1),d[i][0]=d[son][1]+1,接下来就一目了然了
#include<bits/stdc++.h>
using namespace std;
int n,m,M=2000;
int d[1001][2],vis[1001];
vector<int>G[1001];
int dfs(int k)
{vis[k]=1;d[k][0]=0;d[k][1]=2000;for(int i=0;i<G[k].size();i++){int t=G[k][i];if(vis[t])continue;dfs(t);d[k][0]+=d[t][1]+1;d[k][1]+=min(d[t][1],d[t][0]+1);}
}
int main()
{int T;scanf("%d",&T);while(T--){int i,a,b;scanf("%d%d",&n,&m);for(i=0;i<n;i++){G[i].clear();d[i][0]=d[i][1]=vis[i]=0; }for(i=0;i<m;i++){scanf("%d%d",&a,&b);G[a].push_back(b);G[b].push_back(a);}int ans=0;for(i=0;i<n;i++)if(!vis[i]){dfs(i);ans+=min(d[i][0],d[i][1]);}printf("%d %d %d\n",ans/M,m-ans%M,ans%M);}
}
Placing Lampposts ,UVa 10859 树形dp相关推荐
- 10_放置街灯(Placing Lampposts,UVa 10859)
问题来源:刘汝佳<算法竞赛入门经典--训练指南> P70 例题30: 问题描述:有给你一个n个点m条边(m<n<=1000)的无向无环图,在尽量少的节点上放灯,使得所有边都被照 ...
- Placing Lampposts UVA - 10859 放置街灯 树形dp
As a part of the mission 'Beautification of Dhaka City', the government has decided to replace all t ...
- uva 10859 放置街灯树形dp
首先,本题的优化目标有两个:放置的街灯a应该尽量少:被两灯同时照亮的边数b应该尽量大.为了统一起见,我们把后者替换为:恰好被一盏灯照亮的边数c应该尽量小,然后改用x = Ma+c作为优化目标,其中一个 ...
- uva10859放置街灯(树形dp)
例题 30 放置街灯( Placing Lampposts, UVa 10859 ) 给你一个 n 个点 m 条边的无向无环图, 在尽量少的结点上放灯, 使得 所有边都被照亮. 每盏灯将照亮以它为一个 ...
- UVA10859 放置街灯 Placing Lampposts(树状DP)
UVA10859 放置街灯 Placing Lampposts(树状DP) 这道题有两种解决方法,因为原图保证无重边无环无自环, 所以原图一定是一颗树(或森林).,都是树状DP,但是实现的过程大同小异 ...
- uva 10859 放置街灯--Placing Lampposts
uva 10859 - Placing Lampposts(树形dp ###两个别人家的代码,没有注释看了很久 ###所以自己改写了一遍,附注释 https://blog.csdn.net/keshu ...
- [动态规划] 放置街灯 Uva 10859 - Placing Lampposts
[动态规划] 放置街灯 Uva 10859 - Placing Lampposts 英文题目: As a part of the mission �Beautification of Dhaka Ci ...
- UVA - 10859 Placing Lampposts 放置街灯
Placing Lampposts 传送门:https://vjudge.net/problem/UVA-10859 题目大意:给你一片森林,要求你在一些节点上放上灯,一个点放灯能照亮与之相连的所有的 ...
- uva 1218 Perfect Service 树形dp
// uva 1218 Perfect Service 树形dp // // 解题思路: // // d[u][0]表示节点本身是服务器 // d[u][1]表示节点的父节点是服务器 // d[u][ ...
最新文章
- bat 指定jdk_微服务开发 bat 一键批量启动 jar(效率小技巧)
- Mybatis工作流程及其原理与解析
- python获取当前年份_Python根据当前日期取去年同星期日期
- java cpu监控,java系统监控CPU 磁盘
- Spring-AOP实现的两种方式
- sqlserver的触发器练习实例
- Spring5参考指南:SpringAOP简介
- java编码问题详解
- P1421 小玉买文具【入门题】
- excel删除行闪退_excel2010闪退的处理方法
- [logstash-input-log4j]插件使用详解
- 联想t450进入bios设置按哪个键_联想笔记本BIOS设置图解中文说明
- PS使用:利用PS去除图片中的多余文字
- redhat linux 系统修复,简述rhel7系统修复
- 华东师范2018研究生复试上机题题解
- python 播放声音 叮咚_Python
- 开显卡硬件加速和不开的区别
- 元旦的庆贺,是每家每户的快乐
- 操作系统饥饿现象_操作系统中的饿死现象怎样理解?
- 简易QQ聊天室,socket多线程编程(C语言实现),简单易懂
热门文章
- 爬虫系列 | 4、详解Requests的用法
- [每天一个Linux小技巧] Goldendict 快速取词
- TIPOP 出货单单头
- QQ浏览器是如何提升搜索相关性的?
- 114号和116号元素命名最终确定
- 二十年架构师整理出的Java学习路线,学完年薪百万
- android adb 屏幕分辨率,利用 adb 来修改 Android 安卓的分辨率(另类安卓省电方法)...
- 侍魂胧月传说服务器维护,《侍魂胧月传说》2018年12月12日2:00进行全服停机更新维护...
- Linux更改用户名密码
- 在编译前与后调教C语言binary的一种方法