传送门

题意:给一棵带边权的树,求MMM条没有公共边的路径的最小长度的最大值。

N≤50000N \leq50000N≤50000

抛开NOIP不谈,其实这题本身出的很好

显然二分

问题转化成了“最多可以找多少条长度不小于kkk的路径”

递归处理

对于每个结点iii,先统计它的子树剩下的链加上当前边权。

现在我们得到了若干个数,表示以iii为顶的还没用过的链的长度

我们希望用这些数凑出kkk

大于等于kkk的可以直接统计答案

有如下贪心策略:从小到大二分最小的可以匹配的,最后把不能匹配的最长的作为剩下的链传回去

为什么?

首先,很显然尽量匹配小的

如果我们留了一条很长的链不匹配而要传上去,也最多产生111的贡献。而现在直接匹配也会有111的贡献,不配白不配。

为什么从小到大?

如果我们从大到小,或者用一些神奇的顺序,那就是出现大配小的情况。从小到大我们就算不匹配尽量小也能重现之前的状态,尽量小就肯定更优了。

用multiset维护即可。

细节有点多。注意大于等于kkk的必须在开始弹掉,否则可能浪费一个小的。

菊花图可能卡常,可以跑个直径作为二分上限。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <set>
#define MAXN 50005
#define MAXM 100005
using namespace std;
struct edge{int u,v,w;}e[MAXM];
int head[MAXN],nxt[MAXM],cnt;
void addnode(int u,int v,int w)
{e[++cnt]=(edge){u,v,w};nxt[cnt]=head[u];head[u]=cnt;
}
int dp[MAXN];
int count(int u,int f,int k)
{multiset<int> s;int ans=0;for (int i=head[u];i;i=nxt[i])if (e[i].v!=f){ans+=count(e[i].v,u,k);if (dp[e[i].v]+e[i].w>=k) ++ans;else s.insert(dp[e[i].v]+e[i].w);}while (!s.empty()){int mn=*s.begin();multiset<int>::iterator p=s.lower_bound(k-mn);if (p==s.begin()) ++p;if (p==s.end()){dp[u]=max(dp[u],mn);s.erase(s.begin());continue;}++ans;s.erase(p);s.erase(s.begin());}return ans;
}
int dis[MAXN];
void dfs(int u,int f)
{for (int i=head[u];i;i=nxt[i])if (e[i].v!=f){dis[e[i].v]=dis[u]+e[i].w;dfs(e[i].v,u);}
}
int main()
{int n,m;scanf("%d%d",&n,&m);for (int i=1;i<n;i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);addnode(u,v,w);addnode(v,u,w);}dfs(1,0);int mx=0;for (int i=1;i<=n;i++) if (dis[i]>dis[mx]) mx=i;dis[mx]=0;dfs(mx,0);int l=0,r=0,mid;for (int i=1;i<=n;i++) r=max(r,dis[i]);while (l<r){mid=(l+r+1)>>1;memset(dp,0,sizeof(dp));if (count(1,0,mid)>=m) l=mid;else r=mid-1;}printf("%d\n",l);return 0;
}

【NOIP2018】赛道修建【二分】【树形dp】【multiset】【贪心】相关推荐

  1. 【题解】hdu 3586 Information Disturbing 二分 树形dp

    题目描述 Information Disturbing Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Jav ...

  2. 吉吉王国(二分+树形dp)

    吉吉王国 题意: n个点,m个边,有边权,现在要求叶子节点无法与1号点连通,要求切断的总长度不能超过m,且切断的最长的长度尽可能断 题解: 题意的前半部分可以确定是树形dp,后半部分可以确定为是二分 ...

  3. NOIP2018·赛道修建

    初见安~本狸参加了2018年的NOIP,然后到现在[看题解]才能过Day1 T3--tcl--QwQ 本篇题解及代码有参考洛谷题解. 本篇夹带了对于二分深切的痛恨.请自行忽略. 传送门:洛谷 P502 ...

  4. 【BZOJ-2435】道路修建 (树形DP?)DFS

    2435: [Noi2011]道路修建 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3115  Solved: 1002 [Submit][Sta ...

  5. 【CF1646D】D. Weight the Tree(树形dp、贪心)

    加权树 题意: 给定一颗树,让你给树上的点赋予权值.定义一个点的权值等于其所有相邻节点的权重之和时,这个点就是 good. 你需要找到一种赋值方法,使得树中 good 点数最多,同时所有顶点的权重总和 ...

  6. 8.6 edu25 ,577#div2 CF补题(二分 ,dp 与 贪心

    两道题 1.edu 25 D. Suitable Replacement 题意:给定字符串s,t,s中'?'字符可以以任何字符替换,问如何替换 可使 替换后的s重新排序与t的匹配次数最多(len_t& ...

  7. P4383-[八省联考2018]林克卡特树【wqs二分,树形dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P4383 题目大意 nnn个点的一棵树,要求删除kkk条边然后接上kkk条边权为000的边后形成的树上选择一对(p, ...

  8. bzoj 2435: [Noi2011]道路修建【树形dp】

    dp求size和deep,然后对每条边模拟求代价即可 #include<iostream> #include<cstdio> #include<algorithm> ...

  9. BZOJ 4753 二分+树形DP

    思路: 先二分答案 f[x][j]表示在x的子树里选j个点 f[x][j+k]=max(f[x][j+k],f[x][j]+f[v[i]][k]); 初始化 x!=0 -> f[x][1]=p[ ...

  10. CodeForces - 1453E Dog Snacks(树形dp+贪心)

    题目链接:点击查看 题目大意:给出一棵有根树,现在需要选择一个最小的 k 值,可以满足下列的 n 次操作: 起始时位于点 1(根节点) 每一步选择一个未被遍历的节点中,距离最近的,且必须满足此距离小于 ...

最新文章

  1. 【怎样写代码】偷窥高手 -- 反射技术(四):深入窥视属性
  2. 那个专攻JVM的00后求职者,薪水比我的还高···
  3. 用肖像画追踪历史上的信任度变化 |《自然-通讯》论文
  4. linux下同时安装多个tomcat实例
  5. java和jvm的再认识
  6. Mac用户装机必备——让 Mac 也能右键新建/剪切文件,多达 10 余项实用功能
  7. 《网络攻防实践》 课程教学
  8. postgres数据库授权失败
  9. 坚持,对于一件事的坚持
  10. 微信支付 第一次成功,其他无法调起,返回-1(Android eclipse 微信支付之大坑 签名工具问题)
  11. 前端学习(基础介绍)
  12. [开源工具] 串口转wifi —— 两个串口之间通过网络进行通信
  13. 使用node.js构建一个web服务器(适合自学)
  14. A智慧城市,新型信息化城市形态
  15. jvm调优转载自http://www.cnblogs.com/xingzc/p/5756119.html
  16. java解压7z格式的压缩包
  17. 服饰业最佳实践 – ZARA的十大成功要素
  18. 曹晋睿 受邀担任第七届少儿模特明星盛典亲善大使
  19. Java 8 Stream 总结
  20. 军事武器开发使用c语言吗,【单选题】( )是军事革命的前提条件和物质基础,是军事革命的“硬件”。 A. 先进的技术和武器系统 B. 科学的体制编制 C. 创新的军事理论 D. 富有才干的领导人...

热门文章

  1. 美少女什么味??竟然还有美少女风味泡面......
  2. 渣男劈腿,两个女生逼他做出选择,结果......
  3. 北方人的快乐。。。| 今日最佳
  4. 史上最神奇的公式,竟然藏着这么多秘密!
  5. 有气质的人都在看什么?
  6. 技术人必备的碎片化时间学习工具
  7. 逻辑回归算法背后的数学
  8. JAVA软件图片浏览下载_java模拟浏览器下载图片
  9. 超线程_超线程加核显 i310100+梅捷H410超值爆款组合
  10. .net post提交后接收返回数据_Ajax提交表单的方式