【zzulioj 1919 二分】
发布日期:2021-11-04 12:58:40 浏览次数:5 分类:技术文章

本文共 1040 字,大约阅读时间需要 3 分钟。

二分

Description

给一颗树,有n个结点,编号为1到n,1为根节点,有两种操作,1 x y把x结点权值加y,2 x查询x到根节点所有结点的权值和.

每个结点权值初始化为0。

Input

第一行输入一个整数t,代表有t组测试数据。

每组数据第一行为两个整数n,m代表结点个数和操作次数。
接下来n-1行,每行两个整数a,b,表示a结点和b结点有一条边。
接下来m行每行一个操作格式如上。
0<=n<=50000 ,0<=m<=50000,0<=y<=50000

Output

对于每组查询输出一个整数表示结果

Sample Input

1

5 5
1 2
1 3
3 4
3 5
2 5
1 1 2
1 3 1
2 4
2 1
Sample Output

0

3
2

二分很实用,关键在怎样二分

#include
#include
using namespace std;int pa[50011],N,M;int ERFN(int x){ int ans=0,cot=0,i; for(i=1;i<=N;i++) { if(x
M-1) return 1; } } return 0;}int main(){ int T,low,high,a,mid,i; scanf("%d",&T); while(T--) { scanf("%d%d",&N,&M); high=0;low=0; for(i=1;i<=N;i++){ scanf("%d",&pa[i]); high+=pa[i]; low=max(low,pa[i]); } while(low<=high){
//建议 “<=” 二分标准写法 mid=(low+high)/2; if(ERFN(mid)) low=mid+1; else high=mid-1; } printf("%d\n",low); } return 0;}

转载地址:https://blog.csdn.net/WYK1823376647/article/details/52234305 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【zzulioj 1916 DFS序 + 树状数组】
下一篇:【zzulioj 1915 三维数组】

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年03月28日 09时29分54秒