UVA10859 Placing Lampposts】的更多相关文章

我是题面 这道题使我知道了一种很神奇的方法,一定要认真看哦 如果没有被两盏灯同时照亮的边数应尽量大这个限制的话,这就是一道很经典的树形DP题--没有上司的舞会 很可惜,这个限制就在那里,它使得我辛苦写出来的贪心是错的,我只能做到尽量小 /托腮 由于总的边数是确定的,我们可以通过维护被一盏灯照亮的边最小来维护题目限制 我们考虑一下没有这个条件的话,DP该怎么写 用\(f[i][0/1]\)表示是否点亮第\(i\)盏灯时最少点亮几盏灯 我们考虑怎么把边数加进去一起维护呢? 再加一维的话就是\(f[i…
题目链接:点击打开链接 题意:给你一个n个点m条边的无向无环图,在尽量少的节点上放灯,使得所有边都被照亮,每盏灯将照亮以它为一个端点的所有边.在灯的总数最小的前提下,被两盏灯同时照亮的边数应尽量大. 思路:无向无环图的另一个说法是"森林",即由多棵树组成,我们可以先算一棵树上的答案,然后累加起来就行了.本题的优化目标有两个:放置的灯数应尽量少,被两盏灯照亮的边数b应尽量大.为了统一起见,我们把后者替换为:恰好被一盏灯照亮的边数c应尽量少,然后用x=M*a+c作为最小化的目标,其中M是一…
Placing Lampposts 传送门:https://vjudge.net/problem/UVA-10859 题目大意:给你一片森林,要求你在一些节点上放上灯,一个点放灯能照亮与之相连的所有的边.问你最小化防止的灯数,在灯数相同的条件下,最大化两个点都有灯的边数.题解: 首先有一个套路,也是做了此题才知道的,很神奇啊.最小化灯的数量,我们设灯数为V1,把“最大化两个点都有灯的边数”转化为“最下化只有一个点有灯的边数”,设为V2,那么我们设Val=Eps*V1+V2.这样只要DP一个值就可…
问题来源:刘汝佳<算法竞赛入门经典--训练指南> 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 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…
传送门 Description 给定一个\(n\)个点\(m\)条边的无向无环图,选择尽量少的节点,使得所有边都至少有一个顶点被选择.在这个基础上,要求有两个顶点被选择的边数尽可能大 Input 多组数据.第一行是数据组数\(T\). 以下\(T\)组,每组包括: 第一行两个整数\(n\),\(m\). 下面\(m\)行,每行两个整数\(u\),\(v\).代表一条边. Output 对于每组数据输出一行,包括三个用空格隔开的整数,分别是: 最小的灯的个数,两个顶点都被选择的边数,一个顶点被选择…
题目大概说给一个森林求其最小点覆盖数,同时在最小点覆盖条件下输出最多有多少条边被覆盖两次. 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[i][0] 表示不在 i 点放灯,dp[i][1] 表示在 i 点放灯,很简单的一个DP 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string>…
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=91212#problem/E #include <iostream> #include <cstdio> #include <cstring> #include <vector> using namespace std; vector<]; ][],d[][],n,m; int dp(int i,int j,int f) { if(vis[i]…
上次说了说树形dp的入门 那么这次该来一点有难度的题目了: UVA10859 Placing Lampposts 给定一个n个点m条边的无向无环图,在尽量少的节点上放灯,使得所有边都与灯相邻(被灯照亮). 在灯的总数最小的前提下,被两盏灯同时照亮的边数应该尽可能大. 输入格式 第一行输入T,为数据组数. 每组数据第一行输入n,m,分别为该组数据中图的点数和边数. 以下m行,输入各边的两端点u,v. 输出格式 输出共T行. 对每组数据,一行输出三个数,最小灯数.被两盏灯同时照亮的边数.只被一盏灯照…
Placing Lampposts As a part of the mission �Beautification of Dhaka City�, the government has decided to replace all the old lampposts with new expensive ones. Since the new ones are quite expensive and the budget is not up to the requirement, the go…
一.树形 DP 基础 又是一篇鸽了好久的文章--以下面这道题为例,介绍一下树形 DP 的一般过程. POJ 2342 Anniversary party 题目大意:有一家公司要举行一个聚会,一共有 \(n\) 个员工,其中上下级的关系通过树形给出.每个人都不想与自己的直接上级同时参加聚会.每个员工都有一个欢乐度,举办聚会的你需要确定邀请的员工集合,使得它们的欢乐度之和最大,并且没有一个受邀的员工需要与他的直接上级共同参加聚会.\(n\leq 6000\). Solution: 考虑一个子树往上转…
1.UVa 11584 Partitioning by Palindromes(字符串区间dp) 题意:给出一个字符串,划分为若干字串,保证每个字串都是回文串,同时划分数目最小. 思路:dp[i]表示以第i位结尾时最小的划分数目(初始均为0) 状态转移方程1:(初始均为0)当[j:i]是回文串(0≤j≤i,0≤i<n):dp[i]=1(j==0);dp[i]=(dp[i]==0?dp[j-1]+1:min(dp[i],dp[j-1]+1)) 状态转移方程2:(初始:dp[i]=i+1)当[j:i…
这里是学习韦神的6道入门树形dp进行入门,本来应放在day12&&13里,但感觉这个应该单独放出来好点. 这里大部分题目都是参考的韦神的思想. A - Anniversary party 题意:一个树,每个点有一个“快乐”值,父子结点不能同时快乐,问这个结构的最大快乐值. Thinking: 思考如何写出树规方程,即思考根与子节点的关系. dp[i][0]:表示不邀请i员工其子树达到的最大快乐值,dp[i][1]则表示邀请. 这时根与子节点的关系就显然了. #include <cst…
vue.js报错如下: - Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as <script>, as they will not be parsed. 但翻下代码没有多写</div>呀 细看一下,然后是绑定的那个div漏写了一个</div>,导致默认给你…
How many Knight Placing? Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu [Submit]   [Go Back]   [Status] Description   I I U P C 2 0 0 6 Problem H: How many Knight Placing? Input: standard input Output: standard output You a…
Anveshak:在野外放置边缘服务器 本文为SIGCOMM 2018 Workshop (Mobile Edge Communications, MECOMM)论文. 笔者翻译了该论文.由于时间仓促,且笔者英文能力有限,错误之处在所难免:欢迎读者批评指正. 本文及翻译版本仅用于学习使用.如果有任何不当,请联系笔者删除. 本文作者包含4位,University of Helsinki, Finland的Nitinder Mohan,Aleksandr Zavodovski,Pengyuan Zh…
翻译 | Placing Search in Context The Concept Revisited 原文 摘要 [1] Keyword-based search engines are in widespread use today as a popular means for Web-based information retrieval. [2] Although such systems seem deceptively simple, a considerable amount o…
Chess Placing time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You are given a chessboard of size 1 × n. It is guaranteed that n is even. The chessboard is painted like this: "BWBW...BW"…
LINK:Placing Rooks 丢人现场.jpg 没看到题目中的条件 放n个rook 我以为可以无限放 自闭了好半天. 其实只用放n个.那么就容易很多了. 可以发现 不管怎么放 所有列/所有行 都必须得放有. 那么最多只有n-1个pairs 当k==0时 容易发现是一个n!. 总之还是迷了很久.一道比较锻炼我当前水平的计数题. 有k行空着 比较显然 因为一旦多加一对 那么两个棋子就会放在同一行. 考虑计算出方案数 容易发现一开始的方案数为 \(C(n,k)\cdot (n-k)^n\)必然…
链接 [https://codeforces.com/contest/985/problem/A] 题意 给你一个偶数n,输入n/2个数,代表棋子的位置,有一个1*n的棋盘是黑白相间的 问你使得所有棋子在同一种颜色所需移动的最小步数 分析 先对所有棋子的位置排序 贪心枚举两种颜色都算在比较 代码 #include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define mp ma…
题意: 移动最少的步数,使得所有的棋子在同一颜色的格子中. 每次一个棋子只能向左或者向右移动一步,不能移到有棋子的格子中. 思路: 枚举全黑和全白的情况. 对于每一个需要移动的棋子,它移动到的位置一定是从1开始第一个可以移动的位置,不交叉移动,保证了步数最小. 代码: #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; ; int v[N],g[N]; int…
Query the customer_number from the orders table for the customer who has placed the largest number of orders. It is guaranteed that exactly one customer will have placed more orders than any other customer. The orders table is defined as follows: | C…
You are given a chessboard of size 1 × n. It is guaranteed that n is even. The chessboard is painted like this: "BWBW...BW". Some cells of the board are occupied by the chess pieces. Each cell contains no more than one chess piece. It is known t…
[链接]:CF985A [题意]:给你n和n/2个数ai,每个ai和奇数.偶数比较距离(注意选了奇数,偶数的距离就不要算了,反之同理),求最小的答案. [代码]: #include <iostream> #include<queue> #include<string.h> #include<bits/stdc++.h> using namespace std; #define N 100010 #define M 2005 const int INF = 0…