Placing Lampposts】的更多相关文章

问题来源:刘汝佳<算法竞赛入门经典--训练指南> P70 例题30: 问题描述:有给你一个n个点m条边(m<n<=1000)的无向无环图,在尽量少的节点上放灯,使得所有边都被照亮,每盏灯将照亮以它为一个端点的所有边.在灯的总数最小的前提下,被两盏灯同时照亮的边数尽量大. 问题分析:1.题中的图,是由多颗树构成的森林,对每颗树用相同的方法即可.  2.本题优化目标:放置的街灯数a应尽量少,在a尽量少的情况下,被两盏灯同时照亮的边数b尽量大(即只被一盏灯照亮的边数c尽量小(b+c=m)…
UVa10895 Placing Lampposts 链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=34290 [思路] 树上DP+双重优化目标. 本题的特点就是有两个优化目标分别为:在尽量少的结点放灯.在此前提下有被两盏灯照亮的边最多. 首先进行转化:将第二个优化目标转化为在此前提下被一盏灯照亮的边最少.这样两个优化目标就都是求最小值.用一个hash(A,B)将两个新的优化目标AB映射到一个整数,转化为求这个整数的…
Placing Lampposts 传送门:https://vjudge.net/problem/UVA-10859 题目大意:给你一片森林,要求你在一些节点上放上灯,一个点放灯能照亮与之相连的所有的边.问你最小化防止的灯数,在灯数相同的条件下,最大化两个点都有灯的边数.题解: 首先有一个套路,也是做了此题才知道的,很神奇啊.最小化灯的数量,我们设灯数为V1,把“最大化两个点都有灯的边数”转化为“最下化只有一个点有灯的边数”,设为V2,那么我们设Val=Eps*V1+V2.这样只要DP一个值就可…
                          Placing Lampposts As a part of the mission ‘Beautification of Dhaka City’, the government has decided to replace all theold lampposts with new expensive ones. Since the new ones are quite expensive and the budget is notup to…
题目大概说给一个森林求其最小点覆盖数,同时在最小点覆盖条件下输出最多有多少条边被覆盖两次. dp[0/1][u]表示以u为根的子树内的边都被覆盖且u不属于/属于覆盖集所需的最少点数 另外,用cnt[0/1][u]表示满足dp[0/1][u]状态下子树内被覆盖两次最多的边数 对于dp[0][u]只能从其孩子结点v的dp[1][v]转移,而dp[1][u]从dp[0][v]或者dp[1][v]转移,转移时如果同时转移更新cnt的值.. 思路要清晰..转移细节要注意..另外注意是森林. #includ…
这种深层递归的题还是要多多体会,只看一遍是不够的 题意:有一个森林,在若干个节点处放一盏灯,灯能照亮与节点邻接的边.要求:符合要求的放置的灯最少为多少,在灯数最少的前提下,一条边同时被两盏灯照亮的边数最多是多少. 因为边数为m,所以被两盏灯照亮的边数最多就等价于被一盏灯照亮的边数最少 因为题目中要求两个最优解,将x = Ma + c 作为最小化的目标,其中a为灯数,c为被一盏灯照亮的边数,M则是一个比较大的值,到底有多大呢?M要比c的理论上的最大值与最小值之差还要大.这样在比较x1 和 x1时,…
题意: 有n个节点,m条边,无向无环图,求最少点覆盖,并且在同样点数下保证被覆盖两次的变最多 分析: 1.统一化目标,本题需要优化目标有两个,一个最小灯数a,一个最大双覆盖边数b,一大一小,应该归一成,a及单覆盖边数c,\( x=Ma+c \) 为最小化目标,\( M>\Delta c \) 2.决策分析,只有两种放灯与不放,如不放灯则需要父节点必须放灯,故需要父节点状态,设\( f(i,j) \)为节点i在父节点状态为j时的最小x值,j为0代表不放灯,j为1代表放 \begin{cases}…
题意:给定一个森林.每个节点上安装一个灯可以覆盖与该节点相连的所有边.选择最少的节点数num覆盖所有的边.在num最小的前提下,合理放置num个灯使得被两个灯覆盖的边最多? 思路:F[i][0]代表没放灯,F[i][1]代表放了灯,G[i]类似. #include<algorithm> #include<cstdio> #include<cmath> #include<cstring> #include<iostream> ][],g[][];…
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1800 题意 n(n < 1000)个节点m条边的无向无环无重边图,最小顶点覆盖的同时要尽量让只有一个端点是点亮的边数最少 思路 如刘书: 1. 无向无环图一定是森林,适用树形DP 2. 因为有两个优化目标,所以将两个目标线性组合,设以i为根的树上的顶点覆盖数为x,单点点亮边数为…
我是题面 这道题使我知道了一种很神奇的方法,一定要认真看哦 如果没有被两盏灯同时照亮的边数应尽量大这个限制的话,这就是一道很经典的树形DP题--没有上司的舞会 很可惜,这个限制就在那里,它使得我辛苦写出来的贪心是错的,我只能做到尽量小 /托腮 由于总的边数是确定的,我们可以通过维护被一盏灯照亮的边最小来维护题目限制 我们考虑一下没有这个条件的话,DP该怎么写 用\(f[i][0/1]\)表示是否点亮第\(i\)盏灯时最少点亮几盏灯 我们考虑怎么把边数加进去一起维护呢? 再加一维的话就是\(f[i…