传送门

Description

小L 最近沉迷于塞尔达传说:荒野之息(The Legend of Zelda: Breath of The Wild)无法自拔,他尤其喜欢游戏中的迷你挑战。

游戏中有一个叫做“LCT” 的挑战,它的规则是这样子的:现在有一个N 个点的 树(Tree),每条边有一个整数边权vi ,若vi >= 0,表示走这条边会获得vi 的收益;若vi < 0 ,则表示走这条边需要支付- vi 的过路费。小L 需要控制主角Link 切掉(Cut)树上的 恰好K 条边,然后再连接 K 条边权为 0 的边,得到一棵新的树。接着,他会选择树上的两个点p; q ,并沿着树上连接这两点的简单路径从p 走到q ,并为经过的每条边支付过路费/ 获取相应收益。

海拉鲁大陆之神TemporaryDO 想考验一下Link。他告诉Link,如果Link 能切掉 合适的边、选择合适的路径从而使 总收益 - 总过路费最大化的话,就把传说中的大师之剑送给他。

小 L 想得到大师之剑,于是他找到了你来帮忙,请你告诉他,Link 能得到的 总收益 - 总过路费最大是多少。

Solution

原题转化为树上求K+1条不相交路径的最大权值和

是一道WQS二分裸题

首先,可以很容易的写出一个树形dp

然后根据wqs的套路,给每条路径的权值和+add

在计算最大权值和时,我们应当考虑让选到的边数尽可能的大

其实就是在写树d的时候适当注意一下顺序就行

然后,WQS二分出的应该时最小的——使得所选点数\(\geq K+1\)的add

Code

#include<bits/stdc++.h>
#define ll long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}return x*f;
}
const ll inf=3e11,MN=3e5+5;
int N,K,hr[MN],en;
struct edge{int to;ll w;int nex;}e[MN<<1];
inline void ins(int f,int t,int w)
{e[++en]=(edge){t,w,hr[f]};hr[f]=en;e[++en]=(edge){f,w,hr[t]};hr[t]=en;
}
ll ans,dec;
struct dp{ll v;int c;dp(ll _v=0,ll _c=0):v(_v),c(_c){}dp operator+(const dp o){return dp(v+o.v,c+o.c);}dp operator-(const dp o){return dp(v-o.v,c-o.c);}dp operator*(const dp o){return dp(v+o.v-dec,c+o.c-1);}dp operator+(const ll o){return dp(v+o,c);}
}f[MN][3];
dp Max(dp o,dp oo){if(o.v>oo.v)return o;return oo;}
void dfs(int x,int fa)
{register int i;for(i=hr[x];i;i=e[i].nex)if(fa^e[i].to){dfs(e[i].to,x);f[x][2]=Max(f[x][2]+f[e[i].to][0],f[x][1]+f[e[i].to][1]+dp(e[i].w-dec,-1));f[x][1]=Max(f[x][0]+f[e[i].to][1]+e[i].w,f[x][1]+f[e[i].to][0]);f[x][0]=f[x][0]+f[e[i].to][0];}f[x][0]=Max(f[x][0],Max(f[x][1],f[x][2]));
}
inline void check(ll mid)
{register int i;dec=mid;for(i=1;i<=N;++i) f[i][0]=dp(0,0),f[i][2]=f[i][1]=dp(dec,1);dfs(1,0);
}
int main()
{N=read();K=read()+1;register int i,x,y;for(i=1;i<N;++i) x=read(),y=read(),ins(x,y,read());ll l=-inf,r=inf,mid;for(;l<=r;f[1][0].c>=K?r=mid-1:l=mid+1){mid=(l+r)>>1;check(mid);if(f[1][0].c>=K)ans=f[1][0].v-1ll*f[1][0].c*mid;}return 0*printf("%lld\n",ans);
}

Blog来自PaperCloud,未经允许,请勿转载,TKS!

转载于:https://www.cnblogs.com/PaperCloud/p/lkkts.html

[loj 2478][luogu P4843]「九省联考 2018」林克卡特树相关推荐

  1. @loj - 2478@「九省联考 2018」林克卡特树

    目录 @description@ @solution@ @part - 1@ @part - 2@ @accepted code@ @details@ @description@ 小 L 最近沉迷于塞 ...

  2. LibreOJ #2478.「九省联考 2018」林克卡特树 树形dp+带权二分

    题意 给出一棵n个节点的树和k,边有边权,要求先从树中选k条边,然后把这k条边删掉,再加入k条边权为0的边,满足操作完后的图仍然是一棵树.问新树的带权直径最大是多少. n,k≤3∗105n,k≤3∗1 ...

  3. 「九省联考 2018」一双木棋

    「九省联考 2018」一双木棋 题目描述 菲菲和牛牛在一块 \(n\) 行 \(m\) 列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满 ...

  4. 【LOJ】#2479. 「九省联考 2018」制胡窜

    题解 老了,国赛之前敲一个后缀树上LCT和线段树都休闲的很 现在后缀树上线段树合并差点把我写死 主要思路就是后缀树+线段树合并+容斥,我相信熟练的OIer看到这已经会了 但就是不想写 但是由于我过于老 ...

  5. [博弈] LOJ#2471. 「九省联考 2018」一双木棋

    考虑暴力. 每次枚举放哪个位置,设已经放了棋子的位置集合为 SSS,fS" role="presentation">fSfSf_S 表示当前放置情况为 SSS 时, ...

  6. BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)

    BZOJ LOJ 洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍. 对于\(d_i\)不同的情况: Solution 1: xxy tql! 考虑如何把这些数依次填到树里. 首先对于已 ...

  7. [九省联考2018]IIIDX 贪心 线段树

    ~~~题面~~~ 题解: 一开始翻网上题解看了好久都没看懂,感觉很多人都讲得不太详细,所以导致一些细节的地方看不懂,所以这里就写详细一点吧,如果有不对的or不懂的可以发评论在下面. 首先有一个比较明显 ...

  8. 洛谷P4364 [九省联考2018]IIIDX(线段树)

    传送门 题解看得--很--迷? 因为取完一个数后,它的子树中只能取权值小于等于它的数.我们先把权值从大到小排序,然后记$a_i$为他左边(包括自己)所有取完他还能取的数的个数.那么当取完一个点$x$的 ...

  9. 「Luogu4363/BZOJ5248」[九省联考2018]一双木棋chess

    「Luogu4363/BZOJ5248」[九省联考2018]一双木棋chess 学校省选模拟居然拿九省联考来考 然而我还是\(too\space young\),搞不懂什么叫最优 让二者的答案最接近可 ...

最新文章

  1. Ajax实现无刷新树
  2. 用数据品鉴咖啡,407杯咖啡数据教你如何区分咖啡等级和风味
  3. mybatis返回某一字段_8.mybatis的基本工作流程(2.0)※
  4. wps 选择 高亮_WPS的这些功能,竟然如此好用
  5. 小米5 android 4.1.2,小米1刷机包 V5稳定版V1.2 流畅纯净 精简省电 默认开启未知来源 Android4.1.2...
  6. 关于开发工具环境准备事项作为故事来处理的对话
  7. JZOJ 3899. 【NOIP2014模拟】逻辑的连通性
  8. xd怎么制作年月日选项_Adobe XD从入门到精通(上)
  9. 实体词典 情感词典_人工智能技术落地:情感分析概述
  10. Hystrix简介– Hello World
  11. qthread中获取当前优先级_Linux中强大的top命令
  12. 内推 | 阿里巴巴2020秋季校园招聘正式启动!社招也有!!
  13. 项目周期一般多久_深圳app开发公司的软件开发要多久?
  14. 列表解析python_Python 列表解析
  15. AutoLayout的三种设置方式之——NSLayoutConstraint代码篇
  16. XCode小白配置OpenGL练习环境
  17. 数据分析/数据挖掘 入门级选手建议
  18. 机器学习数学基础之极限
  19. 台达A2/B2伺服电机编码器改功率软件
  20. Eclipse语言设置

热门文章

  1. 在Ubunto上安装VMware Tools
  2. 2023兔年春节倒计时小程序源码
  3. 模拟群面——产品设计题
  4. 小米NFC公交卡门卡提示:固件需要升级,请删除实体门卡、小区门卡和空白门卡后重试
  5. 一款基于 Web 的通用数据管理工具 CloudQuery(转载)
  6. 求职英语 进来和退出面试 英文对话
  7. JZ2440系统时钟和定时器
  8. Hango Rider:网易数帆开源 Envoy 企业级自定义扩展框架
  9. [洛谷P4232]无意识之外的捉迷藏-线性规划-纳什均衡
  10. 最欠揍的成语谜语(CSDN 转载)