luogu P4383 [九省联考2018]林克卡特树lct
题目操作有点奇怪,不过可以发现这就是把树先变成\(k+1\)个连通块,然后每个连通块选一条路径(本题中一个点也是一条路径),然后依次接起来.所以实际上要求的是选出\(k+1\)条点不相交的路径的最大权值和.可以先考虑暴力,设\(f_{i,j,0/1/2}\)表示第\(i\)个点的子树中,选了\(j\)条路径,点\(i\)当前和\(0/1/2\)个点有连边,转移可以参考代码
然后能发现这个答案随着\(k\)的增长是一个上凸函数,所以可以凸优化dp,即二分选一条路径的代价,然后dp就没有\(j\)的限制,但是要记录选的路径条数,同时每选一条路径要减去代价,根据选的路径条数和\(k+1\)的大小关系调整二分边界
//WA代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<vector>
#include<cmath>
#include<ctime>
#include<queue>
#include<map>
#include<set>
#define LL long long
#define db double
using namespace std;
const int N=2000+10;
const db eps=1e-6;
LL rd()
{
LL x=0,w=1;char ch=0;
while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
int n;
db aa,bb,a[N],b[N],c[N],f[N],na[N],nb[N];
void cal(db m1,db m2)
{
for(int i=1;i<=n;++i)
{
f[i]=f[i-1],na[i]=na[i-1],nb[i]=nb[i-1];
if(f[i]<f[i-1]+a[i]-m1) f[i]=f[i-1]+a[i]-m1,na[i]=na[i-1]+1,nb[i]=nb[i-1];
if(f[i]<f[i-1]+b[i]-m2) f[i]=f[i-1]+b[i]-m2,na[i]=na[i-1],nb[i]=nb[i-1]+1;
if(f[i]<f[i-1]+c[i]-m1-m2) f[i]=f[i-1]+c[i]-m1-m2,na[i]=na[i-1]+1,nb[i]=nb[i-1]+1;
}
}
int main()
{
n=rd(),aa=rd(),bb=rd();
for(int i=1;i<=n;++i) scanf("%lf",&a[i]);
for(int i=1;i<=n;++i) scanf("%lf",&b[i]);
for(int i=1;i<=n;++i) c[i]=1.0-(1.0-a[i])*(1.0-b[i]);
db l1=0,r1=1,z1,z2;
while(r1-l1>eps)
{
db m1=(l1+r1)/2;
db l2=0,r2=1;
while(r2-l2>eps)
{
db m2=(l2+r2)/2;
cal(m1,m2);
if(nb[n]<=bb) z2=m2,r2=m2-eps;
else l2=m2+eps;
}
cal(m1,z2);
if(na[n]<=aa) z1=m1,r1=m1-eps;
else l1=m1+eps;
}
cal(z1,z2);
printf("%.5lf\n",f[n]+na[n]*z1+nb[n]*z2);
return 0;
}
luogu P4383 [九省联考2018]林克卡特树lct的更多相关文章
- 洛谷P4383 [八省联考2018]林克卡特树lct(DP凸优化/wqs二分)
题目描述 小L 最近沉迷于塞尔达传说:荒野之息(The Legend of Zelda: Breath of The Wild)无法自拔,他尤其喜欢游戏中的迷你挑战. 游戏中有一个叫做“LCT” 的挑 ...
- P4383 [八省联考2018]林克卡特树lct
题目链接 题意分析 一句话题意就是 : 让你选出\((k+1)\)条不相交的链 使得这些链的边权总和最大 (这些链可以是点) 我们考虑使用树形\(DP\) \(dp[i][j][0/1/2]\)表示以 ...
- P4383 [八省联考2018]林克卡特树lct 树形DP+凸优化/带权二分
$ \color{#0066ff}{ 题目描述 }$ 小L 最近沉迷于塞尔达传说:荒野之息(The Legend of Zelda: Breath of The Wild)无法自拔,他尤其喜欢游戏中的 ...
- [BZOJ 5252][LOJ 2478][九省联考2018] 林克卡特树
[BZOJ 5252][LOJ 2478][九省联考2018] 林克卡特树 题意 给定一个 \(n\) 个点边带权的无根树, 要求切断其中恰好 \(k\) 条边再连 \(k\) 条边权为 \(0\) ...
- LuoguP4383 [八省联考2018]林克卡特树lct
LuoguP4383 [八省联考2018]林克卡特树lct https://www.luogu.org/problemnew/show/P4383 分析: 题意等价于选择\(K\)条点不相交的链,使得 ...
- [八省联考2018]林克卡特树lct——WQS二分
[八省联考2018]林克卡特树lct 一看这种题就不是lct... 除了直径好拿分,别的都难做. 所以必须转化 突破口在于:连“0”边 对于k=0,我们求直径 k=1,对于(p,q)一定是从p出发,走 ...
- P4383 [八省联考2018]林克卡特树 树形dp Wqs二分
LINK:林克卡特树 作为树形dp 这道题已经属于不容易的级别了. 套上了Wqs二分 (反而更简单了 大雾 容易想到还是对树进行联通情况的dp 然后最后结果总和为各个联通块内的直径. \(f_{i,j ...
- [九省联考2018]林克卡特树(DP+wqs二分)
对于k=0和k=1的点,可以直接求树的直径. 然后对于60分,有一个重要的转化:就是求在树中找出k+1条点不相交的链后的最大连续边权和. 这个DP就好.$O(nk^2)$ 然后我们完全不可以想到,将b ...
- 洛谷 4383 [八省联考2018]林克卡特树lct——树形DP+带权二分
题目:https://www.luogu.org/problemnew/show/P4383 关于带权二分:https://www.cnblogs.com/flashhu/p/9480669.html ...
随机推荐
- DVWA--CRSF
首先我们对CRSF进行一个介绍 CSRF,全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie.会话等),诱骗其点击恶 ...
- XStream详解
XStream的作用 XStream可以把JavaBean对象转换成XML! 通常服务器向客户端响应的数据都是来自数据库的一组对象,而我们不能直接把对象响应给客户端,所以我们需要把对象转换成XML再响 ...
- Java并发编程之java.util.concurrent包下常见类的使用
一,Condition 一个场景,两个线程数数,同时启动两个线程,线程A数1.2.3,然后线程B数4.5.6,最后线程A数7.8.9,程序结束,这涉及到线程之间的通信. public class Co ...
- MQ常问的问题
目录 1:什么场景使用了mq?直接掉接口不行吗? 2:用消息队列都有什么优点和缺点? 3:Kafka.ActiveMQ.RabbitMQ.RocketMQ 都有什么区别? 4:那你们是如何保证消息队列 ...
- IntentService和HandlerThread
上一篇说了说android 系统的UI更新机制.核心点围绕在Looper的使用上.主线程运行起来后,初始化并运行一个静态Looper,H类(handler子类)处理各种事件. 16ms的UI upda ...
- 使用django-cors-headers 来解决跨域问题
在settting里面这样配置 ALLOWED_HOSTS = ["*"] # Application definition INSTALLED_APPS = [ 'django. ...
- sklearn.feature_extraction.DictVectorizer
sklearn.feature_extraction.DictVectorizer:将字典组成的列表转换成向量.(将特征与值的映射字典组成的列表转换成向量) 1. 特征矩阵行代表数据,列代表特征,0表 ...
- Ubuntu:Unable to locate package ***
在Ubuntu 上使用apt-get 安装包时遇到 Unable to locate package 的信息 解决方案: 更细apt-get然后重新安装 #sudo apt-get update ...
- Spring MVC三种返回方式
spring mvc处理方法支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void. 下面一一进行说明: 1.ModelAndV ...
- 10 mysql选错索引
10 mysql选错索引 在mysql表中可以支持多个索引,有的sql不指定使用哪个索引,由mysql自己来决定,但是有时候mysql选错了索引,导致执行很慢. 例子 CREATE TABLE `t1 ...