noip 2018 day1 T3 赛道修建 贪心_树上问题_multiset
Code:
// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std; #define maxn 50008
#define MAXR 500000001
#define ll int multiset <ll> S[maxn];
multiset <ll> :: iterator it;
int head[maxn], to[maxn << 1], nex[maxn << 1], val[maxn << 1];
int cnt,n, m, edges;
ll mid; void setIO(string a){
freopen((a+".in").c_str(),"r",stdin);
} void addedge(int u,int v,int c){
nex[++edges] = head[u], head[u] = edges, to[edges] = v, val[edges] = c;
} void read(){
scanf("%d%d",&n,&m);
for(int i = 1;i < n;++i){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
addedge(a,b,c);
addedge(b,a,c);
}
} ll dfs(int u,int fa){
S[u].clear();
for(int v = head[u]; v ; v = nex[v]){
if(to[v] == fa) continue;
ll t = dfs(to[v], u) + val[v];
if(t >= mid) ++cnt;
else S[u].insert(t);
} ll MAX = 0; while(!S[u].empty()){
if(S[u].size() == 1) return max(MAX, *S[u].begin());
it = S[u].lower_bound(mid - *S[u].begin());
if(it == S[u].begin() && S[u].count(*it) == 1) it++;
if(it == S[u].end()){
MAX = max(MAX, *S[u].begin());
S[u].erase(S[u].find(*S[u].begin()));
} else {
++cnt ;
S[u].erase(S[u].find(*it));
S[u].erase(S[u].find(*S[u].begin()));
}
} return MAX;
} bool check(){
cnt = 0;
dfs(1, 0);
if(cnt >= m) return true;
return false;
} void solve(){
ll l = 0, r = MAXR, ans = 0;
while(l <= r){
mid = (l + r) >> 1;
if(check()) ans = mid, l = mid + 1;
else r = mid - 1;
}
printf("%lld", ans);
} void shut(){
fclose(stdin);
} int main(){
//setIO("input");
read();
solve();
shut();
return 0;
}
noip 2018 day1 T3 赛道修建 贪心_树上问题_multiset的更多相关文章
- noip 2018 day1 T1 铺设道路 贪心
		Code: #include<cstdio> using namespace std; int main() { int last=0,ans=0; int n;scanf("% ... 
- 二分答案 + multiset || NOIP 2018 D1 T3 || Luogu  P5021 赛道修建
		题面:P5021 赛道修建 题解:二分答案,用Dfs进行判断,multiset维护. Dfs(x,fa,Lim)用来计算以x为根的子树中有多少符合条件的路径,并返回剩余未使用的最长路径长. 贪心思想很 ... 
- NOIP提高组2018 D1T3 【赛道修建】
		颓了好几天,终于把这到题处理了一下. 话说,其实我考场上想出正解了,但是手残,算复杂度的时候多按了一个零,导致算出来是1亿多的复杂度,都不敢打...就把部分分都捡了一下... 题目描述: C 城将要举 ... 
- P5021 赛道修建[贪心+二分]
		题目描述 C 城将要举办一系列的赛车比赛.在比赛前,需要在城内修建 mm 条赛道. C 城一共有 nn 个路口,这些路口编号为 1,2,-,n1,2,-,n,有 n-1n−1 条适合于修建赛道的双向通 ... 
- NOIP 2018 day1 题解
		今年noip的题和去年绝对是比较坑的题了,但是打好的话就算是普通水准也能350分以上吧. t1: 很显然这是一个简单的dp即可. #include<iostream> #include&l ... 
- [NOIP 2018 Day1] 简要题解
		[题目链接] 铺设道路 : https://www.luogu.org/problemnew/show/P5019 货币系统 : https://www.luogu.org/problemnew/sh ... 
- NOIP 2018 Day1
		Fei2Xue@Lian$Tian! 三道原题qwq真的凉 半年前看到有人发说说,梦见省选打开题目,是Please contact lydsy2012@163.com! 没想到一语成谶 大众分300 ... 
- 洛谷P2668 斗地主==codevs 4610 斗地主[NOIP 2015 day1 T3]
		P2668 斗地主 326通过 2.6K提交 题目提供者洛谷OnlineJudge 标签搜索/枚举NOIp提高组2015 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 出现未知错误是说梗啊 ... 
- NOIP 2014 Day1 T3飞扬的小鸟
		题目描述:http://codevs.cn/problem/3729/ 表示各种shabi的我编和调了半天,思路大体就是一个完全背包的模型,不过会多一些额外的转移(因为题目限制高度之类的),不过值得注 ... 
随机推荐
- 解决jquery动态增加元素后children值没有变的问题
			html代码如下: <ul id="attr_input_panel"> <li> <div class="attr_input_item& ... 
- Linux下查询CPU 缓存的工具
			在Linux下能够使用例如以下工具查询CPU缓存: 方式1: $ lscpu L1d cache: 32K <span style="white-space:pre"> ... 
- mysql-计算字段
			一.计算字段 存储在数据库表中的数据一般不是应用程序所需要的格式 1.如果想在一个字段中既显示公司名,又显示公司的地址,但这两个信息一般包含在不同的字段中. 2.城市.州和邮编存储在不同的列中,但邮件 ... 
- NHibernate概括
			什么是?NHibernate?NHibernate是一个面向.NET环境的对象/关系数据库映射工具. 对象/关系数据库映射(object/relational mapping,ORM)这个术语表示一种 ... 
- rest_framework 权限功能
			权限: 问题:不用视图不用权限可以访问 基本使用 写上一个权限类 创建utils 中 permission.py文件 class SvipPermisson(object): message = &q ... 
- [Atcoder Grand 006 C] Rabbit Exercise 解题报告 (期望)
			题目链接:https://www.luogu.org/problemnew/show/AT2164 https://agc006.contest.atcoder.jp/tasks/agc006_c 题 ... 
- HibernateProperties 配置属性
			Hibernate properties Hibernate配置属性 属性名 用途hibernate.dialect ;一个Hibernate Dialect类名允许Hibernate针对特定的关系数 ... 
- mac terminal终端怎么退出python命令行
			>>>使用 quit(), exit(), 或者Command+d,或者Command+z退出命令行. 
- 在 Ubuntu 18.04 LTS 无头服务器上安装 Oracle VirtualBox
			作者: Sk 译者: LCTT qhwdw | 2018-10-12 01:59 本教程将指导你在 Ubuntu 18.04 LTS 无头服务器上,一步一步地安装 Oracle VirtualBox. ... 
- 命令alias、gerp、find及基础Shell脚本
			一. alias 命令:系统设置命令别名 用法:alias [-p] [name[=value] ... ] 注意‘=’和字符串之间不能包含空格 显示当前设置的别名:alias 或 alias ... 
