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

题解:

对于如何求解最小的节点数目这点,实际上有些想法,“是不是应当认为来一发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. java与模式读后总结

    一 老规则边看边写书上的代码,磨磨蹭蹭三个多星期终于把一本1000+的java与模式看完了. 于是,在这里贴上自己对每个模式的思考和总结,其实这个东西在我边看边写的时候已经写了一大半,博文再写一次算是 ...

  2. 12.Visual Studio 2013中的默认快捷键

    这篇大致是IDE的使用技巧,常用的也就那么几个. 我自己用的最多的是注释.取消注释.格式调整.运行测试.开始调试.断开调试.重新开始调试.删除行ctrl+L.保存.全部保存.打开资源管理器.搜索等几个 ...

  3. 学习笔记:Web Storage API

    Web Storage API 提供了存储机制,通过该机制,浏览器可以安全地存储键值对,比使用 cookie 更加直观. Web Storage 包含如下两种机制: sessionStorage 为每 ...

  4. php编码转换相关

    iconv (PHP 4 >= 4.0.5, PHP 5, PHP 7) iconv — 字符串按要求的字符编码来转换 string iconv ( string $in_charset , s ...

  5. [转]linux C 打印当前时间

    #include <stdio.h> #include <time.h> int main(void) { time_t t; time(&t); printf(&qu ...

  6. Weblogic 10.3.6.0 集群搭建

    Weblogic 集群搭建 Oracle的Weblogic分开发者版本和生产版本,有32位和64位.一般生产版本的weblogic是64位的,安装文件是一个大小为1G多的jar包.去oracle官网上 ...

  7. 允许被ping设置方法

    参考下图设置:

  8. VMware NAT端口映射外网访问虚拟机linux可能会出现的错误总结

    博主因为做实验报告的缘故,尝试以NAT的方式从外网远程连接到虚拟机的linux操作系统:https://www.cnblogs.com/jluzhsai/p/3656760.html,本文主要举出在此 ...

  9. JavaScript and Ruby in ABAP

    Netweaver里有个mini JavaScript engine CL_JAVA_SCRIPT, 对于Js code的编译和执行都是用system call完成. 只能当玩具用:report SJ ...

  10. solr 近实时搜索

    摘要: Solr的近实时搜索NRT(Near Real Time Searching)意味着文档可以在索引以后马上可以被查询到. Solr不会因为本次提交而阻塞更新操作,不会等待后台合并操作(merg ...