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

题解:

对于如何求解最小的节点数目这点,实际上有些想法,“是不是应当认为来一发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. asp.net5开发中DNX SDK版本的影响

    某次asp.net5开发中遇到了一个很奇怪的问题,引用部分的nuget包没有显示任何错误,如下图: 但是编译时出现了几百个错误: 错误基本都是形如“CS0246 The type or namespa ...

  2. 多个activity之间的数据共享

    Activity之间的数据共享问题起初一看并没有那么纠结,原因在于两点,一来两个Activity之间可以通过回传的方式进行数据的共享,而哪怕是多个Activity之间,也可以通过静态类进行数据的共享. ...

  3. localstorage本地存储的应用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Sometimes it takes going through something so awful to realize the beauty that is out there in this world.

    Sometimes it takes going through something so awful to realize the beauty that is out there in this ...

  5. C#添加删除防火墙例外(程序、端口)

    一. 添加 COM 引用 在引用里,选择 COM 页, 找到 NetFwTypeLib , 确定即可 二. 添加允许通过防火墙的例外程序 using System; using System.Coll ...

  6. <转载>为什么VR不可能成功?

    这是一个来自Quora的回答,我把要点总结翻译了下,供大家参考批判. How big and issue the nausea problem for Virtual Reality products ...

  7. 创见VR-上海,会后总结

    第一次,参加这种VR会,感觉不错.上午突然发现自己之前的一款AR Demo下载量在10-50了,真没想到,虽然这款Demo有一处bug至今未修复 ^^.不过,看来现在AR/VR确实恨火. ZSpace ...

  8. cocos2d-x 配置教程

    下载cocos2d-x并解压(解压的路径不要带空格,不然以后用cygwin编译工程的时候会出现错误),我的解压到了D:\cocos2d-2.1rc0-x-2.1.2(我的版本是cocos2d-2.1r ...

  9. linux性能测试脚本

    http://linux-bench.com/ What is Linux-Bench? Linux-Bench is a simple script that provides a basic le ...

  10. 禁止windows自动更新后重新启动

    运行gpedit.msc: 按照下图操作: 参考:http://www.xitongcheng.com/jiaocheng/win7_article_94.html