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. Elasticsearch (2) - 映射

    常用映射类型 核心的字段类型如下: String 字符串包括text和keyword两种类型: 1.text analyzer 通过analyzer属性指定分词器. 下边指定name的字段类型为tex ...

  2. iOS 创建xcode插件

    苹果的"一个足以应付所有"策略使得它的产品越来越像一个难以下咽的药丸.尽管苹果已经将一些工作流带给了iOS/OS X的开发者,我们仍然希望通过插件来使得Xcode更加顺手! 虽然苹 ...

  3. iOS中使用 Reachability 检测网络区分手机网络类型 WiFi 和2 3 4 G

    如果你想在iOS程序中提供一仅在wifi网络下使用(Reeder),或者在没有网络状态下提供离线模式(Evernote).那么你会使用到Reachability来实现网络检测. 写本文的目的 了解Re ...

  4. docker上配置nginx负载均衡

    采用ubuntu系统,docker安装自行百度 1.安装tomcat docker run -d -p : tomcat docker run -d -p : tomcat 安装两个实例,端口分别为8 ...

  5. Python Linked List

    上周日教导一个科班非技术的朋友学习 Python 编程.他的 Python 水平大概就是看了几篇短的 Python 介绍博客.会流程控制和全局函数编写. 具体教导思路是从自己实现一个链表出发,研究学习 ...

  6. HDU4300 Clairewd’s message(拓展kmp)

    Problem Description Clairewd is a member of FBI. After several years concealing in BUPT, she interce ...

  7. [ERROR ] Error parsing configuration file: /etc/salt/minion - conf should be a document, not <type 'str'>.

    错误信息 [ERROR ] Error parsing configuration file: /etc/salt/minion - conf should be a document, not &l ...

  8. Ubuntu14.04环境下Qt5.5以上版本无法输入中文的解决教程

    1.前言 由于Qt5.4之后对之前的Qt5版本不再二进制兼容,所以网上很多简单的旧的办法已经失效了,所以本教程的办法是重新编译fcitx-qt5,生成最新的libfcitxplatforminputc ...

  9. python 05 关于对python中引用的理解

    数据的在内存中的地址就是数据的引用. 如果两个变量为同一个引用,那么这两个变量对应的数据一定相同: 如果两个变量对应的数据相同,引用不一定相同. 通过id(数据)可以查看数据对应的地址,修改变量的值, ...

  10. centos7 ftp 500 OOPS: cannot change directory:/var/ftp/xutong/

    在设置多用户登录的时候 该指定的用户xutong对于上级目录/var/ftp 没有访问权限 修改一下上级目录的权限 chmod /var/ftp 对于ftp多用户访问的配置修改也做一个记录 以是设置F ...