题意:
给定一个无向,无环,无多重边,要求找出最少的若干点,使得,每条边之中至少有一个点上有街灯。在满足上述条件的时候将还需要满足让两个点被选择的边的数量尽量多。

题解:

对于如何求解最小的节点数目这点,实际上有些想法,“是不是应当认为来一发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+二目标最优解的求解方案的更多相关文章

  1. UVa 10859 - Placing Lampposts 树形DP 难度: 2

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  2. UVA 10859 - Placing Lampposts 树形DP、取双优值

                              Placing Lampposts As a part of the mission ‘Beautification of Dhaka City’, ...

  3. UVaLive 10859 Placing Lampposts (树形DP)

    题意:给定一个无向无环图,要在一些顶点上放灯使得每条边都能被照亮,问灯的最少数,并且被两盏灯照亮边数尽量多. 析:其实就是一个森林,由于是独立的,所以我们可以单独来看每棵树,dp[i][0] 表示不在 ...

  4. UVA - 1218 Perfect Service(树形dp)

    题目链接:id=36043">UVA - 1218 Perfect Service 题意 有n台电脑.互相以无根树的方式连接,现要将当中一部分电脑作为server,且要求每台电脑必须连 ...

  5. UVa 1292 - Strategic game (树形dp)

    本文出自   http://blog.csdn.net/shuangde800 题目链接: 点击打开链接 题目大意 给定一棵树,选择尽量少的节点,使得每个没有选中的结点至少和一个已选结点相邻. 思路 ...

  6. Uva LA 3902 - Network 树形DP 难度: 0

    题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

  7. UVa 12093 Protecting Zonk (树形DP)

    题意:给定一个有n个节点的无根树,有两种装置A和B,每种都有无限多个.在某个节点X使用A装置需要C1的花费,并且此时与节点X相连的边都被覆盖.在某个节点X使用B装置需要C2的花费,并且此时与节点X相连 ...

  8. $Poj3585\ Accumulation Degree$ 树形$DP/$二次扫描与换根法

    Poj Description 有一个树形的水系,由n-1条河道与n个交叉点组成.每条河道有一个容量,联结x与y的河道容量记为c(x,y),河道的单位时间水量不能超过它的容量.有一个结点是整个水系的发 ...

  9. uva 10859 - Placing Lampposts dp

    题意: 有n个节点,m条边,无向无环图,求最少点覆盖,并且在同样点数下保证被覆盖两次的变最多 分析: 1.统一化目标,本题需要优化目标有两个,一个最小灯数a,一个最大双覆盖边数b,一大一小,应该归一成 ...

随机推荐

  1. SpringMVC核心技术---转发和重定向

    @Controller public class Mycontroller { //转发 @RequestMapping("/adduser") public String add ...

  2. AnyCAD在医疗中的应用

    void addPoint(List<float> buffer, Vector3 pt) { buffer.Add((float)pt.X); buffer.Add((float)pt. ...

  3. JAVA 面试重点知识个人总结

    一.集合: 1 .Collection(是java.util下的接口) 和 Collections(是java.util下的类). 2 .List, Set,是否继承自Collection接口,Map ...

  4. 将vim配置成一个轻量的IDE开发工具

    1.插件管理工具 2.安装插件 3.配置.vimrc 1.插件管理工具 vim的插件有很多,为了后面方便添加新的插件,我们需要一个插件管理工具来帮我们管理安装的插件,这里使用的是vim-pathoge ...

  5. Paoding-Rose学习

    * HttpServletRequest.getContextPath 获取web程序root.如果是默认位置,返回””空串,否则返回 /根路径名 * rose是如何扫描到资源的 利用spring提供 ...

  6. MVC 控制器向View传值的三种方法(转)

    1.提供视图模型对象 你能把一个对象作为View方法的参数传递给视图. public ViewResult Index() { DateTime date = DateTime.Now; return ...

  7. html5标准

    1.<!DOCTYPE html> html5标准网页声明,原先的是一串很长的字符串,现在是这个简洁形式,支持html5标准的主流浏览器都认识这个声明.表示网页采用html5 浅谈:htm ...

  8. hiho一下 第三十八周 二分答案

    题目链接:http://hihocoder.com/contest/hiho38/problem/1 ,挺难想的解题思路,好题. 按照提示的算法来: 我们需要找什么? 在这个题目中我们需要找的是路径最 ...

  9. NYOJ-596-谁是最好的Coder

    原题链接 谁是最好的Coder 时间限制:1000 ms  |  内存限制:65535 KB 难度:0 描述 计科班有很多Coder,帅帅想知道自己是不是综合实力最强的coder. 帅帅喜欢帅,所以他 ...

  10. Centos7安装 PostgreSQL步骤

    1. 安装服务器即可. Yum install postgresql-server Yum install postgresql-contrib 2. 验证是否安装成功: rpm -aq| grep ...