Codevs 2756 树上的路径
2756 树上的路径
给出一棵树,求出最小的k,使得,且在树中存在路径P,使得k>= S 且 k <=E. (k为路径P上的边的权值和)
第一行给出N,S,E,N代表树的点数,S,E如题目描述一致
下面N-1行给出这棵树的相邻两个节点的边及其权值W
输出一个整数k,表示存在路径P,并且路径上的权值和 K>=S , k<=E,若无解输出-1
5 10 40
2 4 80
2 3 57
1 2 16
2 5 49
16
边权W<=10000,
保证答案在int(longint)范围内,且|E-S|<=50,
树上点的个数N<=30000
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #define N 30009 6 using namespace std; 7 int n,A,B,K,la,head[N],next[N<<1],ans=2*1e9,size[N]; 8 int dep[N],maxson[N],root,tot,lls,num,ls[N]; 9 bool v[N]; 10 struct node 11 { 12 int fr,to,len; 13 }a[N<<1]; 14 void addedge(int x,int y,int z) 15 { 16 a[++la].fr=x,a[la].to=y,a[la].len=z; 17 next[la]=head[x],head[x]=la; 18 } 19 void get_root(int x,int from) 20 { 21 size[x]=1; 22 maxson[x]=0; 23 for(int i=head[x];i;i=next[i]) 24 if (!v[ a[i].to ]&&a[i].to!=from) 25 { 26 get_root(a[i].to,x); 27 size[x]+=size[ a[i].to ]; 28 maxson[x]=max(maxson[x],size[ a[i].to ]); 29 } 30 maxson[x]=max( maxson[x],tot-size[x] ); 31 if (!root||maxson[x]<maxson[root]) root=x; 32 33 } 34 void get_dep(int x,int from) 35 { 36 for (int i=head[x];i;i=next[i]) 37 if (!v[ a[i].to ]&&a[i].to!=from) 38 { 39 ls[++lls]=dep[ a[i].to ]=dep[x]+a[i].len; 40 get_dep(a[i].to,x); 41 42 } 43 } 44 int get_num(int x,int jian) 45 { 46 int i,j,k,rt=0; 47 ls[ lls=1 ]=dep[x]=jian; 48 get_dep(x,0); 49 50 sort(ls+1,ls+lls+1); 51 for (i=1,j=lls;i<=lls;i++) 52 { 53 while (j>1&&ls[i]+ls[j]>K) j--; 54 if (j>i)rt+=j-i; 55 } 56 return rt; 57 } 58 void divide(int x) 59 { 60 num+=get_num(x,0); 61 v[x]=1; 62 for (int i=head[x];i;i=next[i]) 63 if (!v[ a[i].to ]) 64 { 65 num-=get_num(a[i].to,a[i].len); 66 tot=size[ a[i].to ]; 67 root=0,get_root(a[i].to,0); 68 divide( root ); 69 } 70 } 71 int main() 72 { 73 int i,j,k,x,y,z,last; 74 scanf("%d%d%d",&n,&A,&B); 75 for(i=1;i<n;i++) 76 { 77 scanf("%d%d%d",&x,&y,&z); 78 addedge(x,y,z),addedge(y,x,z); 79 } 80 last=1e9; 81 for(K=A-1;K<=B;K++) 82 { 83 num=0; 84 memset(v,0,sizeof(v)); 85 tot=n,root=0; 86 get_root(1,0); 87 divide(root); 88 if(num>last) 89 { 90 printf("%d\n",K); 91 return 0; 92 } 93 last=num; 94 } 95 printf("-1\n"); 96 }
备注:引用自Codevs 题解
转载于:https://www.cnblogs.com/suishiguang/p/6172038.html
Codevs 2756 树上的路径相关推荐
- CodeForces - 1521D Nastia Plays with a Tree(树上最小路径覆盖)
题目链接:点击查看 题目大意:给出一棵树,可以删除 xxx 条边并增加 xxx 条边使得树变为竹子,竹子就是一条链,问 xxx 最小可以为多少,输出一种方案数 题目分析:树上最小路径覆盖,按照子节点个 ...
- bzoj3784 树上的路径 点分治+RMQ+优先队列
题目分析 树上的路径路径?可以,这很点分治. 求最长的mmm条的长度?可以,着很优先队列. 但问题是,用优先队列只能做全局才能保证复杂度是对的,但点分治是分治就不能做全局. 于是对于每次点分治,都记录 ...
- [XSY3112] 接水果(树上包含路径,整体二分,扫描线)
传送门 给出一棵nnn个点的树.接下来给出PPP条树上路径ai→bia_i\to b_iai→bi,及其权值cic_ici.最后有QQQ个询问,每个询问给出一条树上路径ui→viu_i\to v ...
- BZOJ3784树上的路径
题目描述 给定一个N个结点的树,结点用正整数1..N编号.每条边有一个正整数权值.用d(a,b)表示从结点a到结点b路边上经过边的权值.其中要求a<b.将这n*(n-1)/2个距离从大到小排序, ...
- CF E2 - Daleks' Invasion (medium) (LCA求两点树上路径上的最大边权)
http://codeforces.com/contest/1184/problem/E2 题意:给出一副图,首先求出这幅图的最小生成树 , 然后修改这幅图上不属于最小生成树的边权,使得修改后的图在求 ...
- SPOJ-COT-Count on a tree(树上路径第K小,可持久化线段树)
题意: 求树上A,B两点路径上第K小的数 分析: 同样是可持久化线段树,只是这一次我们用它来维护树上的信息. 我们之前已经知道,可持久化线段树实际上是维护的一个前缀和,而前缀和不一定要出现在一个线性表 ...
- 【jzoj5055】【GDOI2017模拟二试4.12】【树上路径】【点分治】
题目大意 给定一颗n个结点的无根树,树上的每个点有一个非负整数点权,定义一条路径的价值为路径上的点权和-路径的点权最大值. 给定参数p,我们想知道,有多少不同的树上简单路径,满足它的价值恰好是p的倍数 ...
- JZOJ5055 树上路径
Description 给定一颗n个结点的无根树,树上的每个点有一个非负整数点权,定义一条路径的价值为路径上的点权和-路径的点权最大值. 给定参数p,我们想知道,有多少不同的树上简单路径,满足它的价值 ...
- 线段树合并与分裂维护树上最长上升子序列 + 点分治删点 ---- 2021 牛客多校第一场 C - Cut the tree(详解)
题目大意: 给你一个树,树上每个点都有一个权值valnodeval_{node}valnode,路径(u,v)(u,v)(u,v) 上所有点按顺序有序序列,令f(u,v)f(u,v)f(u,v)是这 ...
最新文章
- linux连sql server
- PT60报错(在表 $ 中午关键字$的输入项目T555Z)
- 用jsphtml:file实现一个文件上传的例子,而且有验证
- python编译安装没有c扩展_为什么在安装simplejson时得到“C扩展无法编译”?
- mysql不使用swapp的原因_SolidWorks不能使用的原因
- xp计算机用户密码设置,XP怎么设置开机密码_XP系统设置开机密码教程-192路由网...
- Spring Boot项目在GitHub上初始化及控管步骤
- Windows开机自动启动Virtual Box虚拟机(官方指南手册)
- Linux内核配置.config文件
- 论MongoDB索引选择的重要性
- 阿里云常用产品汇总及解释
- STM32单片机网络通信调试
- 记录下一个带内购的iOS app的上架App Store历程
- Local Generic Representation for Face Recognition with Single Sample per Person (ACCV, 2014)
- 高光谱图像去噪相关资源汇总(常用对比算法+数据集+评价指标)
- 网站内嵌百度地图定向到公司位置
- Alpine系统介绍
- 谈谈我的框架设计经验
- 三子棋(N子棋)游戏的保姆级超详细教程(C语言)
- 关闭Windows Defender实时保护解决下载激活软件报检测到病毒无法下载的问题
热门文章
- 解决win2003安装exchangeServer后关机慢的方法
- 米线店结账程序 装饰着模式_实验报告2_装饰者模式
- vector元素的读取
- matlab imaqhwinfo
- 836c语言程序设计,2017年辽宁师范大学计算机应用研究所836C语言程序设计考研强化模拟题...
- spring中的设计模式_面试:设计模式在spring中的应用
- 可能是最先出来的关于介绍使用Vue3的一本书
- “全人类的知识宝藏”维基百科迎来了20岁的生日!
- ajax后台怎么取mapp,后台管理实现
- android拍照功能无预览,Android 无预览拍照