2756 树上的路径

 时间限制: 3 s     空间限制: 128000 KB     题目等级 : 大师 Master
 
 
题目描述 Description

给出一棵树,求出最小的k,使得,且在树中存在路径P,使得k>= S 且 k <=E. (k为路径P上的边的权值和)

输入描述 Input Description

第一行给出N,S,E,N代表树的点数,S,E如题目描述一致

下面N-1行给出这棵树的相邻两个节点的边及其权值W

输出描述 Output Description

输出一个整数k,表示存在路径P,并且路径上的权值和 K>=S , k<=E,若无解输出-1

样例输入 Sample Input

5 10 40

2 4 80

2 3 57

1 2 16

2 5 49

样例输出 Sample Output

16

数据范围及提示 Data Size & Hint

边权W<=10000,

保证答案在int(longint)范围内,且|E-S|<=50,

树上点的个数N<=30000

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 30009
using namespace std;
int n,A,B,K,la,head[N],next[N<<],ans=*1e9,size[N];
int dep[N],maxson[N],root,tot,lls,num,ls[N];
bool v[N];
struct node
{
int fr,to,len;
}a[N<<];
void addedge(int x,int y,int z)
{
a[++la].fr=x,a[la].to=y,a[la].len=z;
next[la]=head[x],head[x]=la;
}
void get_root(int x,int from)
{
size[x]=;
maxson[x]=;
for(int i=head[x];i;i=next[i])
if (!v[ a[i].to ]&&a[i].to!=from)
{
get_root(a[i].to,x);
size[x]+=size[ a[i].to ];
maxson[x]=max(maxson[x],size[ a[i].to ]);
}
maxson[x]=max( maxson[x],tot-size[x] );
if (!root||maxson[x]<maxson[root]) root=x; }
void get_dep(int x,int from)
{
for (int i=head[x];i;i=next[i])
if (!v[ a[i].to ]&&a[i].to!=from)
{
ls[++lls]=dep[ a[i].to ]=dep[x]+a[i].len;
get_dep(a[i].to,x); }
}
int get_num(int x,int jian)
{
int i,j,k,rt=;
ls[ lls= ]=dep[x]=jian;
get_dep(x,); sort(ls+,ls+lls+);
for (i=,j=lls;i<=lls;i++)
{
while (j>&&ls[i]+ls[j]>K) j--;
if (j>i)rt+=j-i;
}
return rt;
}
void divide(int x)
{
num+=get_num(x,);
v[x]=;
for (int i=head[x];i;i=next[i])
if (!v[ a[i].to ])
{
num-=get_num(a[i].to,a[i].len);
tot=size[ a[i].to ];
root=,get_root(a[i].to,);
divide( root );
}
}
int main()
{
int i,j,k,x,y,z,last;
scanf("%d%d%d",&n,&A,&B);
for(i=;i<n;i++)
{
scanf("%d%d%d",&x,&y,&z);
addedge(x,y,z),addedge(y,x,z);
}
last=1e9;
for(K=A-;K<=B;K++)
{
num=;
memset(v,,sizeof(v));
tot=n,root=;
get_root(,);
divide(root);
if(num>last)
{
printf("%d\n",K);
return ;
}
last=num;
}
printf("-1\n");
}

备注:引用自Codevs 题解

Codevs 2756 树上的路径的更多相关文章

  1. codevs 2756树上的路径

    题意: 2756 树上的路径  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master    题目描述 Description 给出一棵树,求出最小的k,使得,且在树 ...

  2. 【BZOJ-3784】树上的路径 点分治 + ST + 堆

    3784: 树上的路径 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 462  Solved: 153[Submit][Status][Discuss ...

  3. bzoj 3784: 树上的路径 堆维护第k大

    3784: 树上的路径 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 88  Solved: 27[Submit][Status][Discuss] ...

  4. 【BZOJ3784】树上的路径 点分治序+ST表

    [BZOJ3784]树上的路径 Description 给定一个N个结点的树,结点用正整数1..N编号.每条边有一个正整数权值.用d(a,b)表示从结点a到结点b路边上经过边的权值.其中要求a< ...

  5. 树上的路径 BZOJ 3784

    树上的路径 [问题描述] 给定一个N个结点的树,结点用正整数1..N编号.每条边有一个正整数权值.用d(a,b)表示从结点a到结点b路边上经过边的权值.其中要求a<b.将这n*(n-1)/2个距 ...

  6. BZOJ 3784: 树上的路径

    Description 问一棵树上前 \(k\) 大路径的边权. Sol 边分治. 非常感谢数据没有菊花图. 为了写写边分治试试然后就开了这道题. 边分治非常好想,选一条重边,分成两部分,然后分别求最 ...

  7. SPOJ COT2 树上找路径上不同值的个数

    题目大意 给出多个询问u , v , 求出u-v路径上点权值不同的个数 开始做的是COT1,用主席树写过了,理解起来不难 很高兴的跑去做第二道,完全跟普通数组区间求k个不同有很大区别,完全没思路 膜拜 ...

  8. CTSC模拟题 树上的路径

    Description 给定一棵\(N\)个结点的树,结点用正整数\(1 \dots N\)编号,每条边有一个正整数权值.用\(d(a, b)\)表示从结点\(a\)到结点\(b\)路径上经过边的权值 ...

  9. BZOJ.3784.树上的路径(点分治 贪心 堆)

    BZOJ \(Description\) 给定一棵\(n\)个点的带权树,求树上\(\frac{n\times(n-1)}{2}\)条路径中,长度最大的\(m\)条路径的长度. \(n\leq5000 ...

随机推荐

  1. UOJ#52. 【UR #4】元旦激光炮(交互)

    题意 给出三个已经排好序的数组$a, b, c$ 在$100$次询问内找出第$k$小的元素 Sol 一种很显然的$log^2n$的做法:首先在$a$中二分,然后再$b,c$中二分.这样可以得到$60$ ...

  2. java实现单向链表的增、删、改、查

    单向链表 作者:vashon package com.ywx.link; /** * 单向链表 * @author vashon * */ public class LinkTest { public ...

  3. 安装nginx的一些注意事项

    1.如何彻底屏蔽掉Nginx的banner 为了安全或者某些个人的原因,如果要屏蔽掉nginx的banner,要修改以下几个位置: src/http/ngx_http_header_filter_mo ...

  4. 使用libsvm实现文本分类

    @Hcy(黄灿奕) 文本分类,首先它是分类问题,应该对应着分类过程的两个重要的步骤,一个是使用训练数据集训练分类器,另一个就是使用测试数据集来评价分类器的分类精度.然而,作为文本分类,它还具有文本这样 ...

  5. Java Web项目,Android和微信小程序的初始页面配置

    Java Web项目 我们在Eclipse里开了Java Web项目之后,Run As Tomcat或者Apache服务器,本地运行,如果直接用http://localhost:8080访问项目,会发 ...

  6. nginx 安全配置文档

    1.配置文档中有多处明确写出了nginx的配置文件路径,该路径是测试环境中的路径,线上系统的nginx配置文件与文档中所写的路径可能不一样,在进行相关配置时,应以线上配置文件的实际路径为准. 线上系统 ...

  7. 一次执行两个npm "start": "concurrently 'npm:dev' 'npm:json-server'"

    用的这个程序 concurrently 说是再有异步的时候,&& 就不好使,而且&& 也不能执行npm 只能执行命令 官方地址:https://www.npmjs.co ...

  8. 打开或关闭CD_ROM

    实现效果: 知识运用: API函数 mciSendString //函数用来向媒体控制接口设备发送命令  声明如下 [DllImport("winmm.dll",EntryPoin ...

  9. MySQL系列(二)--MySQL存储引擎

    影响数据库性能的因素: 1.硬件环境:CPU.内存.存盘IO.网卡流量等 2.存储引擎的选择 3.数据库参数配置(影响最大) 4.数据库结构设计和SQL语句 MySQL采用插件式存储引擎,可以自行选择 ...

  10. composer 设置代理

    在命令行终端中输入以下内容: export https_proxy='192.168.1.133:1080' export http_proxy='192.168.1.133:1080' 此前提是你已 ...