树上路径统计,点分治解决。

统计一段区间,naive地用了set解决,这样的复杂度是O(nlog^2n)的

考场代码出了个问题,统计答案时找到了之前的最优答案,但是没有加上新的一段,导致60分

#include<iostream>
#include<cstdio>
#include<set> using namespace std; inline int rd(){
int ret=,f=;char c;
while(c=getchar(),!isdigit(c))f=c=='-'?-:;
while(isdigit(c))ret=ret*+c-'',c=getchar();
return ret*f;
} const int MAXN = ; struct Edge{
int next,to,w;
}e[MAXN<<];
int ecnt,head[MAXN];
inline void add(int x,int y,int w){
e[++ecnt].next = head[x];
e[ecnt].to = y;
e[ecnt].w = w;
head[x] = ecnt;
} int n,L,R; bool vis[MAXN];
int siz[MAXN];
void getsiz(int x,int pre){
siz[x]=;
for(int i=head[x];i;i=e[i].next){
int v=e[i].to;
if(v==pre||vis[v]) continue;
getsiz(v,x);
siz[x]+=siz[v];
}
}
int mn,root;
void getroot(int x,int pre,int tot){
int mx=;
for(int i=head[x];i;i=e[i].next){
int v=e[i].to;
if(v==pre||vis[v]) continue;
mx=max(mx,siz[v]);
getroot(v,x,tot);
}
mx=max(mx,tot-siz[x]);
if(mx<mn) root=x,mn=mx;
}
set<int> se;
int s[MAXN]; void dfs(int x,int pre,int dis){
if(dis>R) return;//
s[++s[]]=dis;
for(int i=head[x];i;i=e[i].next){
int v=e[i].to;
if(v==pre||vis[v]) continue;
dfs(v,x,dis+e[i].w);
}
} int ans=<<; void dac(int x){
mn=n;
getsiz(x,-);
getroot(x,-,siz[x]);
int u=root;vis[u]=;
se.clear();
se.insert(<<);
for(int i=head[u];i;i=e[i].next){
int v=e[i].to;
if(vis[v]) continue;
s[]=;dfs(v,u,e[i].w);
for(int j=s[];j>=;j--){
int tmp=*se.lower_bound(L-s[j]);
tmp+=s[j];
if(tmp<ans&&tmp<=R&&tmp>=L) ans=tmp;
}
for(int j=s[];j>=;j--){
if(s[j]<ans&&s[j]<=R&&s[j]>=L) ans=s[j];
se.insert(s[j]);
}
} for(int i=head[u];i;i=e[i].next){
int v=e[i].to;
if(!vis[v]) dac(v);
}
} int main(){
n=rd();L=rd();R=rd();
int x,y,w;
for(int i=;i<=n-;i++){
x=rd();y=rd();w=rd();
add(x,y,w);add(y,x,w);
}
dac();
if(ans==<<) cout<<-;
else cout<<ans;
return ;
}

【NOIP2017提高组模拟7.3】B的更多相关文章

  1. JZOJ 5196. 【NOIP2017提高组模拟7.3】B

    5196. [NOIP2017提高组模拟7.3]B Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits   Goto Pro ...

  2. JZOJ 5197. 【NOIP2017提高组模拟7.3】C

    5197. [NOIP2017提高组模拟7.3]C Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits   Goto Pro ...

  3. JZOJ 5195. 【NOIP2017提高组模拟7.3】A

    5195. [NOIP2017提高组模拟7.3]A Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits   Goto Pro ...

  4. JZOJ 5184. 【NOIP2017提高组模拟6.29】Gift

    5184. [NOIP2017提高组模拟6.29]Gift (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed ...

  5. JZOJ 5185. 【NOIP2017提高组模拟6.30】tty's sequence

    5185. [NOIP2017提高组模拟6.30]tty's sequence (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB ...

  6. NOIP2017提高组 模拟赛15(总结)

    NOIP2017提高组 模拟赛15(总结) 第一题 讨厌整除的小明 [题目描述] 小明作为一个数学迷,总会出于数字的一些性质喜欢上某个数字,然而当他喜欢数字k的时候,却十分讨厌那些能够整除k而比k小的 ...

  7. NOIP2017提高组 模拟赛13(总结)

    NOIP2017提高组 模拟赛13(总结) 第一题 函数 [题目描述] [输入格式] 三个整数. 1≤t<10^9+7,2≤l≤r≤5*10^6 [输出格式] 一个整数. [输出样例] 2 2 ...

  8. NOIP2017提高组模拟赛 10 (总结)

    NOIP2017提高组模拟赛 10 (总结) 第一题 机密信息 FJ有个很奇怪的习惯,他把他所有的机密信息都存放在一个叫机密盘的磁盘分区里,然而这个机密盘中却没有一个文件,那他是怎么存放信息呢?聪明的 ...

  9. NOIP2017提高组模拟赛 8(总结)

    NOIP2017提高组模拟赛 8(总结) 第一题 路径 在二维坐标平面里有N个整数点,Bessie要访问这N个点.刚开始Bessie在点(0,0)处. 每一步,Bessie可以走到上.下.左.右四个点 ...

  10. NOIP2017提高组模拟赛 9 (总结)

    NOIP2017提高组模拟赛 9 (总结) 第一题 星星 天空中有N(1≤N≤400)颗星,每颗星有一个唯一的坐标(x,y),(1≤x,y ≤N).请计算可以覆盖至少K(1≤K≤N)颗星的矩形的最小面 ...

随机推荐

  1. [bzoj 1758] 重建计划

    bzoj 1758 重建计划 题意: 给定一棵有边权的树和两个数 \(L, R (L\leq R)\),求一条简单路径,使得这条路径经过的边数在 \(L, R\) 之间且路径经过的边的边权的平均值最大 ...

  2. dot watch

    dot watch+vs code提升asp.net core开发效率 在园子中,已经又前辈介绍过dotnet watch的用法,但是是基于asp.net core 1.0的较老版本来讲解的,在asp ...

  3. NET Core 开发环境

    NET Core 开发环境 最近,一直在往.Net Core上迁移,随着工作的深入,发现.Net Core比.Net Framework好玩多了.不过目前还在windows下开发,虽然VisualSt ...

  4. setTimeout() 实现程序每隔一段时间自动执行

    定义和用法 setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. 语法 setTimeout(code,millisec) 参数 描述 code 必需.要调用的函数后要执行的 Ja ...

  5. 关于C#解析shp文件

    最近在做项目时,要求可以上传shp文件到指定的地图中,地图开发使用的arcgisapi,网上找了好多解析shp文件的js,但都不是太理想,直到群里的小伙伴提到Gdal 首先,到GDAL官网下载自己使用 ...

  6. text-transform 字母的大小写

    text-transform: none   默认 capitalize    每个单词以大写字母开头 uppercase    仅有大写字母 lowercase     无大写字母,仅有小写字母 i ...

  7. php 判断字符串中是否包含另一个字符串 strpos

    strpos (PHP 4, PHP 5, PHP 7) strpos — 查找字符串首次出现的位置 说明 strpos ( string $haystack ,  $needle [, int $o ...

  8. Git基础使用教程(仓库初始化,源码clone,源码push)

    一.下载Git源码管理客户端 Git下载地址:https://git-scm.com/ 二.检查电脑是否已安装Git 1)已安装:输入git出现下图提示则代表已安装成功. 2)未安装情况下git会出现 ...

  9. 像音乐播放App一样移动背景

    如果你经常听歌,你会发现歌曲app的背景会随着音乐移动的,从左到右或者从上到下,这种动画虽然简单,但是这里有一个技巧.如果你还不明白这种动效看看下面的demo (更多详细请参考:https://git ...

  10. iOS优化

    load妙用 aop面向切面编程 NSNumber Or Int @()适配64位 经过漫长时间的学习 你终于掌握了iOS大法 你找到了份iOS开发的工作 信誓旦旦的要开始你的coding生涯 老板对 ...