UVA 10859 Placing Lamppost 树形DP+二目标最优解的求解方案
题意:
给定一个无向,无环,无多重边,要求找出最少的若干点,使得,每条边之中至少有一个点上有街灯。在满足上述条件的时候将还需要满足让两个点被选择的边的数量尽量多。
题解:
对于如何求解最小的节点数目这点,实际上有些想法,“是不是应当认为来一发BFS,之后强行染色招最小的会好呢?”但是这样就会很容易发现一个误区——染色方案被强行确定了。。而这个其实是不能够直接确定为两种的。
因而,应当使用树形dp。应当想将整棵树转化为一个有根树。在转换的过程当中进行动态规划:
对于每个节点,首先都必然可以选择在该点处放一个灯——虽然会导致预算报表。对于不放灯的选项却有个调价——他的父亲节点必须放了灯——否则就会有一条路没有被照亮。。
但是考虑到多目标情况——让同时被两个端点照亮的路尽量多实际上等效于——让植被一个接等找到的路的数量足够小。那么我们可以定义一个优化目标,设他为KK=a*m+b;其中A代表了街灯的数量,M是一个超级大数,该大数至少满足使得M大于 b所能够渠道的最大值。
于是,这样就变成了一个优化变量。。
#include<bits/stdc++.h>
using namespace std; const long long MAXN=;
const long long INF=;
const long long K=;
bool legal[MAXN][];
long long cnt[MAXN][];
bool vis[MAXN]; vector<int> G[MAXN];
long long ans=;
long long n,m;
long long dfs(int self,int father)
{
vis[self]=;
if(self!=father)
{ legal[self][]=;
legal[self][]=legal[father][];
}
int len=G[self].size();
for(int i=;i<len;++i)
{
if(G[self][i]!=father)dfs(G[self][i],self);
} long long ret1=K;
long long ret2=; len=G[self].size();
for(int i=;i<len;++i)
{ int tar=G[self][i];
if(tar==father)continue; if(cnt[tar][]<cnt[tar][])
{
ret1+=cnt[tar][]+;
}else ret1+=cnt[tar][];
// ret1+=min(cnt[tar][1],cnt[tar][0]);
ret2+=cnt[tar][]+; }
if(legal[self][])cnt[self][]=ret2;
else cnt[self][]=INF;
cnt[self][]=ret1; return min(ret1,ret2);
} void init()
{
memset(vis,,sizeof(vis));
memset(cnt,,sizeof(cnt));
memset(legal,,sizeof(legal));
ans=;
cin>>n>>m;
for(int i=;i<m;++i)
{
int a,b;
cin>>a>>b;
G[a].push_back(b);
G[b].push_back(a);
}
for(int i=;i<n;++i)
{
if(!vis[i])
{
legal[i][]=legal[i][]=;
ans+=dfs(i,i);
}
G[i].clear();
}
cout<< ans/K <<" "<<m-ans%K<<" "<<ans%K<<endl;
} int main()
{
cin.sync_with_stdio(false);
int tt;cin>>tt;
while(tt--)init(); return ;
}
UVA 10859 Placing Lamppost 树形DP+二目标最优解的求解方案的更多相关文章
- UVa 10859 - Placing Lampposts 树形DP 难度: 2
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- UVA 10859 - Placing Lampposts 树形DP、取双优值
Placing Lampposts As a part of the mission ‘Beautification of Dhaka City’, ...
- UVaLive 10859 Placing Lampposts (树形DP)
题意:给定一个无向无环图,要在一些顶点上放灯使得每条边都能被照亮,问灯的最少数,并且被两盏灯照亮边数尽量多. 析:其实就是一个森林,由于是独立的,所以我们可以单独来看每棵树,dp[i][0] 表示不在 ...
- UVA - 1218 Perfect Service(树形dp)
题目链接:id=36043">UVA - 1218 Perfect Service 题意 有n台电脑.互相以无根树的方式连接,现要将当中一部分电脑作为server,且要求每台电脑必须连 ...
- UVa 1292 - Strategic game (树形dp)
本文出自 http://blog.csdn.net/shuangde800 题目链接: 点击打开链接 题目大意 给定一棵树,选择尽量少的节点,使得每个没有选中的结点至少和一个已选结点相邻. 思路 ...
- Uva LA 3902 - Network 树形DP 难度: 0
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- UVa 12093 Protecting Zonk (树形DP)
题意:给定一个有n个节点的无根树,有两种装置A和B,每种都有无限多个.在某个节点X使用A装置需要C1的花费,并且此时与节点X相连的边都被覆盖.在某个节点X使用B装置需要C2的花费,并且此时与节点X相连 ...
- $Poj3585\ Accumulation Degree$ 树形$DP/$二次扫描与换根法
Poj Description 有一个树形的水系,由n-1条河道与n个交叉点组成.每条河道有一个容量,联结x与y的河道容量记为c(x,y),河道的单位时间水量不能超过它的容量.有一个结点是整个水系的发 ...
- uva 10859 - Placing Lampposts dp
题意: 有n个节点,m条边,无向无环图,求最少点覆盖,并且在同样点数下保证被覆盖两次的变最多 分析: 1.统一化目标,本题需要优化目标有两个,一个最小灯数a,一个最大双覆盖边数b,一大一小,应该归一成 ...
随机推荐
- 微信支付配置参数:支付授权目录、回调支付URL
一.开通微信支付的首要条件是:认证服务号或政府媒体类认证订阅号(一般认证订阅号无法申请微信支付) 二.微信支付分为老版支付和新版支付,除了较早期申请的用户为老版支付,现均为新版微信支付. 三.公众平台 ...
- vc++ 6.0编译后生成的文件
程序在编译后,在目标路径下会生成多个文件 Debug文件夹(*.exe,*.ilk,*.obj,*.pch,*.pdb,*.idb,*,pdb),*.cpp,*.dsp,*.ncb,*.plg ...
- Apache Spark 2.2.0 中文文档 - Structured Streaming 编程指南 | ApacheCN
Structured Streaming 编程指南 概述 快速示例 Programming Model (编程模型) 基本概念 处理 Event-time 和延迟数据 容错语义 API 使用 Data ...
- font:inherit
font:inherit 字体的设置 设置所有元素的字体保持一致: 所有元素:*{font:inherit;} /* IE8+ */ body体用percent:body{font:100%/1 sa ...
- Navicat for Oracle设置唯一性和递增序列
[数据库] Navicat for Oracle基本用法图文介绍 一. 设置唯一性 参考文章:Oracle之唯一性约束(UNIQUE Constraint)用法详解唯一性约束英文是Unique Con ...
- Android商城开发系列(十四)—— 设置监听RecyclerView的位置
在前面的博客中有讲到过点击一个图片按钮控制RecyclerView的滚动到顶部位置的效果,但是那个图片按钮一直处在一个显示的状态,今天我们来改造一下那个地方,我们要实现的效果是:一开始打开的时候看不到 ...
- 联动选择通过ajax获取选择对应的数据
网站有时候需要这种联动然后获取到想对应的数据 思路: 这种的话就是你每次选择哪一个就将这个设置一个标注 表示你现在选择的是哪一个 然后每选择一次就进行一次ajax查询,ajax里面有一个data里面添 ...
- TFS看板的迭代规划
故事点 故事点更多体现的是用户情景或者bug的规模,采用斐波拉契数列(1,2,3,5,8,13)这样的数字表示,包含如下内容: 相对工作量 复杂度 风险和不确定性 相对工作量 下面演示一个Case来说 ...
- Nginx+proxy实现简单的负载均衡
环境说明:操作系统centos6.6 64位web操纵系统是:web1=192.168.10.10(LAMP) web2=192.168.10.11(LNMP),这里只是测试nginx实现负载均衡效果 ...
- 实现带查询功能的ComboBox控件
实现效果: 知识运用: ComboBox控件的AutoCompleteMode属性 public AutoCompleteMode AutoCompleteMode{get;set;} //属性值为枚 ...