题意:

在一个无向无环图上放置灯盏,保证灯的数量最少的同时被两盏灯照亮的边数尽量大.

思路:

把被两盏灯照亮的边数尽量大转化成被一盏灯照到的边尽量少,如果有两个需要优化的量v1,v2,要求首先满足v1最少,在v1最少的前提下v2最少,则设一个M,M > max(v2)-min(v2).

然后设一个x,使x=Mv1+v2.

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int M = 2000;
const int maxn = 1010;
vector<int> adj[maxn];
bool vis[maxn];
int f[maxn][2];
int n, m;
void dfs(int u) {vis[u] = true;f[u][0] = 0;f[u][1] = M;//M*v1,放一个灯,加一次Mfor(int i=0; i<adj[u].size(); i++) {int v = adj[u][i];if(vis[v])continue;dfs(v);f[u][0] += f[v][1]+1;//父结点不放灯,v2+1if(f[v][0]<f[v][1]) f[u][1] += f[v][0]+1;//如果子节点不放灯,v2+1else f[u][1] += f[v][1];}
}
int main() {int kase;scanf("%d", &kase);while(kase--) {scanf("%d%d", &n, &m);for(int i=0; i<n; i++) adj[i].clear();int u, v;for(int i=0; i<m; i++) {scanf("%d%d", &u, &v);adj[u].push_back(v);adj[v].push_back(u);}memset(f, 0, sizeof(f));memset(vis, false, sizeof(vis));int ans = 0;for(int i=0; i<n; i++) {if(vis[i] == false) {dfs(i);ans += min(f[i][0], f[i][1]);//两种决策取其小.}}printf("%d %d %d\n", ans/M, m-ans%M, ans%M);}return 0;
}

Placing Lampposts相关推荐

  1. UVA - 10859 Placing Lampposts 放置街灯

    Placing Lampposts 传送门:https://vjudge.net/problem/UVA-10859 题目大意:给你一片森林,要求你在一些节点上放上灯,一个点放灯能照亮与之相连的所有的 ...

  2. [动态规划] 放置街灯 Uva 10859 - Placing Lampposts

    [动态规划] 放置街灯 Uva 10859 - Placing Lampposts 英文题目: As a part of the mission �Beautification of Dhaka Ci ...

  3. uva 10859 放置街灯--Placing Lampposts

    uva 10859 - Placing Lampposts(树形dp ###两个别人家的代码,没有注释看了很久 ###所以自己改写了一遍,附注释 https://blog.csdn.net/keshu ...

  4. 10_放置街灯(Placing Lampposts,UVa 10859)

    问题来源:刘汝佳<算法竞赛入门经典--训练指南> P70 例题30: 问题描述:有给你一个n个点m条边(m<n<=1000)的无向无环图,在尽量少的节点上放灯,使得所有边都被照 ...

  5. UVA10859 放置街灯 Placing Lampposts(树状DP)

    UVA10859 放置街灯 Placing Lampposts(树状DP) 这道题有两种解决方法,因为原图保证无重边无环无自环, 所以原图一定是一颗树(或森林).,都是树状DP,但是实现的过程大同小异 ...

  6. 【UVA10859】Placing Lampposts

    题面   As a part of the mission 'Beautification of Dhaka City', the government has decided to replace ...

  7. Placing Lampposts UVA - 10859 放置街灯 树形dp

    As a part of the mission 'Beautification of Dhaka City', the government has decided to replace all t ...

  8. uva10859 Placing Lampposts

    求一棵树的最小点覆盖(设为S0),在最小点覆盖相同的情况下使得同时被两个点覆盖的边尽量多(使得仅被一个点覆盖的边尽量少) 1.树形dp求点的最小覆盖子集 dp[i][j]:j状态下以i为顶点的子树最小 ...

  9. Placing Lampposts ,UVa 10859 树形dp

    UVa 10859 日常刷白书,第三次刷dp刷到这题,竟然还是不会写..... 这个题给定n个点m条边的无向无环图,有至多1000个节点,每个节点有两个状态,可以放灯或者不放灯,要求放最少的灯使得所有 ...

最新文章

  1. pandas 里面对nan的判断
  2. linux下创建多进程,linux之多进程fork:进程创建
  3. foo php,php – $foo === TRUE和TRUE === $foo有什么区别?
  4. 金融产品京东金融2015年战略主攻三大方向:股权众筹、农村金融和校园金融...
  5. 颜值爆表!Redis 官方可视化工具来啦,功能真心强大!
  6. ug添加imachining变量_UG用的不够快?是不是还没建标准库
  7. java io .log_namenode无法启动:java.io.FileNotFoundException: .log (Permission denied)
  8. noip复赛电脑有excel吗_指南 | 现在就必须了解的信息学竞赛(高一学生)
  9. 通过hx1838遥控数码管显示对应数字的程序及问题
  10. 元转万元单位换算_度数单位换算(元换算成万元换算器)
  11. [luogu] CF128A Statues dfs
  12. illegal offset type php,PHP warning Illegal offset type错误解决办法
  13. 羊车门问题的python代码_作业:羊车门问题
  14. 基于SpringBoot的影视/短视频网站系统
  15. 【海】沙滩啤酒win7桌面主题
  16. 利用遗传算法库DEAP优化交易策略
  17. C++——素数(质数)专题训练4
  18. python:实现叠加图片(附完整源码)
  19. 8、RH850 F1 IIC通讯功能和配置
  20. 重磅!2019年中国科学院院士增选当选院士名单公布

热门文章

  1. Buffon投针(近似计算π)
  2. 【封面】华为解读“生态伙伴”
  3. 解决SVN pristine text xxxx not present问题
  4. linux 忽略错误信息,linux – 由于文件模式错误而忽略/etc/logrotate.conf
  5. 2020-11-21
  6. Java泛型的重要目的:别让猫别站在狗队里
  7. 时间戳 与 Unix时间戳
  8. 用虚拟信用卡支付的时候经常出现交易失败、无法付款?一篇文章帮你解决这些问题
  9. 社旗一高2021高考成绩查询,2021年九师联盟:河南/山西省高三年级下学期5月联考分数线公布!...
  10. 【深度学习】使用tensorflow实现AlexNet