UVA-10859 - Placing Lampposts(树形DP)
题意:有一个n个点m条边的无向无环图,在尽量少的结点上放灯,使得所有边都被照亮,每栈灯将照亮以它为一个端点的所有边,在灯的总数最小的情况下,被两栈灯同时照亮的情况下边数最大
解法:树形DP(边覆盖)
d[i][0]=0,d[i][1]=1;
d[i][0]=d[j][1];
d[i][1]=min(d[i][0],d[i][1])
cnt[i][0],cnt[i][1]表示节点i放灯和不放灯的情况下边被两栈灯照亮的数量。
// File Name: 10859.cpp // Author: zlbing // Created Time: 2013/1/27 16:39:01 #include<iostream> #include<string> #include<algorithm> #include<cstdlib> #include<cstdio> #include<set> #include<map> #include<vector> #include<cstring> #include<stack> using namespace std; #define MAXN 1000+5 vector<int> adj[MAXN]; int n,m; int d[MAXN][2],cnt[MAXN][2]; bool vis[MAXN]; void dfs(int u) {vis[u]=true;d[u][0]=0,d[u][1]=1;cnt[u][0]=cnt[u][1]=0;for(int i=0;i<adj[u].size();i++){int v=adj[u][i];if(!vis[v]){dfs(v);d[u][0]+=d[v][1];cnt[u][0]+=cnt[v][1];if(d[v][1]==d[v][0]){d[u][1]+=d[v][1];cnt[u][1]+=max(cnt[v][1]+1,cnt[v][0]);}else if(d[v][1]<d[v][0]){d[u][1]+=d[v][1];cnt[u][1]+=cnt[v][1]+1;}else{d[u][1]+=d[v][0];cnt[u][1]+=cnt[v][0];}}} } int main(){int N;scanf("%d",&N);while(N--){scanf("%d%d",&n,&m);int a,b;for(int i=0;i<n;i++)adj[i].clear();for(int i=0;i<m;i++){scanf("%d%d",&a,&b);adj[a].push_back(b);adj[b].push_back(a);}memset(vis,0,sizeof(vis));int ans=0,ans1=0;for(int i=0;i<n;i++)if(!vis[i]){dfs(i);if(d[i][0]<d[i][1]){ans+=d[i][0];ans1+=cnt[i][0];}else if(d[i][0]==d[i][1]){ans+=d[i][0];ans1+=max(cnt[i][0],cnt[i][1]);}else{ans+=d[i][1];ans1+=cnt[i][1];}}printf("%d %d %d\n",ans,ans1,m-ans1);}return 0; }
转载于:https://www.cnblogs.com/arbitrary/archive/2013/01/27/2879001.html
UVA-10859 - Placing Lampposts(树形DP)相关推荐
- [动态规划] 放置街灯 Uva 10859 - Placing Lampposts
[动态规划] 放置街灯 Uva 10859 - Placing Lampposts 英文题目: As a part of the mission �Beautification of Dhaka Ci ...
- uva 10859 放置街灯树形dp
首先,本题的优化目标有两个:放置的街灯a应该尽量少:被两灯同时照亮的边数b应该尽量大.为了统一起见,我们把后者替换为:恰好被一盏灯照亮的边数c应该尽量小,然后改用x = Ma+c作为优化目标,其中一个 ...
- UVA - 10859 Placing Lampposts 放置街灯
Placing Lampposts 传送门:https://vjudge.net/problem/UVA-10859 题目大意:给你一片森林,要求你在一些节点上放上灯,一个点放灯能照亮与之相连的所有的 ...
- Placing Lampposts UVA - 10859 放置街灯 树形dp
As a part of the mission 'Beautification of Dhaka City', the government has decided to replace all t ...
- uva 1218 Perfect Service 树形dp
// uva 1218 Perfect Service 树形dp // // 解题思路: // // d[u][0]表示节点本身是服务器 // d[u][1]表示节点的父节点是服务器 // d[u][ ...
- UVA - 1218 Perfect Service(树形dp)
题目链接:UVA - 1218 Perfect Service 题意 有n台电脑,互相以无根树的方式连接,现要将其中一部分电脑作为服务器,且要求每台电脑必须连接且只能连接一台服务器(不包括作为服务器的 ...
- uva 10859 放置街灯--Placing Lampposts
uva 10859 - Placing Lampposts(树形dp ###两个别人家的代码,没有注释看了很久 ###所以自己改写了一遍,附注释 https://blog.csdn.net/keshu ...
- 10_放置街灯(Placing Lampposts,UVa 10859)
问题来源:刘汝佳<算法竞赛入门经典--训练指南> P70 例题30: 问题描述:有给你一个n个点m条边(m<n<=1000)的无向无环图,在尽量少的节点上放灯,使得所有边都被照 ...
- Placing Lampposts ,UVa 10859 树形dp
UVa 10859 日常刷白书,第三次刷dp刷到这题,竟然还是不会写..... 这个题给定n个点m条边的无向无环图,有至多1000个节点,每个节点有两个状态,可以放灯或者不放灯,要求放最少的灯使得所有 ...
- UVA10859 放置街灯 Placing Lampposts(树状DP)
UVA10859 放置街灯 Placing Lampposts(树状DP) 这道题有两种解决方法,因为原图保证无重边无环无自环, 所以原图一定是一颗树(或森林).,都是树状DP,但是实现的过程大同小异 ...
最新文章
- 如何使用Github管理自己的代码
- 虎虎生威且看今朝 | 数据派优秀志愿者风采展
- Python 是一门怎样的语言
- 苹果x可以双卡吗_苹果12支持双卡吗
- Spring系列合并
- 微信公众号api关注接口php,微信公众平台接口开发入门示例
- 团队作业——微博网站小调查
- firefox css3 transform样式 位置偏移问题解决
- C基础(36——40)
- TCP长连接和短连接区别
- Tomcat 服务器搭建
- VSCode之容器开发环境搭建 (Remote-Containers)
- Systemverilog always_comb 过程块
- 二进制漏洞挖掘之angr‘s Reaching Definition Analysis(一)
- 开发STM32MP1,离不开一个好开发板
- 10G整数文件中寻找中位数
- 宏基aspire拆机触摸_Acer宏碁(Acer宏碁)Acer S5-371-76GS超极本拆解图评测-ZOL中关村在线...
- 数据载入、存储及文件格式(数据分析)
- 汤松榕:人工智能赋能多应用场景 助力企业实现数字化转型
- 一种基于Android、iOS系统的移动端车牌识别方法,实现手机拍照识别车牌