【题解】Tree
\(\text{Solution:}\)
考虑点分治。对于这个两点之间,它意味着这点对必须是不一样的。
考虑用双指针统计答案。显然,对于两个数\(a,b\),要让\(a+b=k,a\)越大则\(b\)越小。于是可以用双指针统计答案。
剩下的就是一个点分治板子。
GrNB!!!
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e5+10;
const int inf=(1<<30);
int tot,head[MAXN],siz[MAXN],S,k,n,sum[MAXN];
struct edge{
int nxt,to,dis;
}e[MAXN];
int ms,mson[MAXN],rt,ans;
bitset<MAXN>vis;
inline void add(int x,int y,int w){
e[++tot].to=y;
e[tot].nxt=head[x];
e[tot].dis=w;
head[x]=tot;
}
void Gr(int x,int fa){
siz[x]=1;mson[x]=0;
for(int i=head[x];i;i=e[i].nxt){
int j=e[i].to;
if(vis[j]||j==fa)continue;
Gr(j,x);siz[x]+=siz[j];
if(siz[j]>mson[x])mson[x]=siz[j];
}
if(S-siz[x]>mson[x])mson[x]=S-siz[x];
if(ms>mson[x])rt=x,ms=mson[x];
}
int t,tt,dis[MAXN],tr[MAXN];
void Getdis(int x,int fa,int d){
dis[++t]=d;
for(int i=head[x];i;i=e[i].nxt){
int j=e[i].to;
if(vis[j]||j==fa)continue;
Getdis(j,x,d+e[i].dis);
}
}
void solve(int x,int d,int fg){
t=0;Getdis(x,0,d);
tt=0;sort(dis+1,dis+t+1);
int l=1,r=t;
while(l<=r){
if(dis[l]+dis[r]<=k){ans+=(r-l)*fg,++l;}
else --r;
}
}
void work(int x,int s){
vis[x]=1;solve(x,0,1);
for(int i=head[x];i;i=e[i].nxt){
int j=e[i].to;
if(vis[j])continue;
solve(j,e[i].dis,-1);
ms=inf;rt=0;
S=siz[j]<siz[x]?siz[j]:(s-siz[x]);
Gr(j,0);work(rt,S);
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<n;++i){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);add(y,x,z);
}
scanf("%d",&k);
rt=0;ms=inf;S=n;Gr(1,0);work(rt,S);
printf("%d\n",ans);
return 0;
}
第一次写的时候犯了一个浅显的错误:相加为\(k\)的路径并不是只找到最小的路径相匹配的最大路径即可,它并不存在一个总包含的关系。(错误要点)
【题解】Tree的更多相关文章
- 2018HN省队集训
HNOI2018省队集训 Day 1 流水账 T1 tree 换根+求\(lca\)+求子树和,一脸bzoj3083遥远的国度的既视感.子树和讨论一下就好了,\(lca\)?也是大力讨论一波. 先写了 ...
- C#版 - 226. Invert Binary Tree(剑指offer 面试题19) - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - 2 ...
- [LeetCode 题解]: Binary Tree Preorder Traversal
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given a bi ...
- [LeetCode 题解]: Symmetric Tree
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given a ...
- [LeetCode 题解]: Maximum Depth of Binary Tree
Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...
- 竞赛题解 - Broken Tree(CF-758E)
Broken Tree(CF-758E) - 竞赛题解 贪心复习~(好像暴露了什么算法--) 标签:贪心 / DFS / Codeforces 『题意』 给出一棵以1为根的树,每条边有两个值:p-强度 ...
- Codeforces Round #530 (Div. 2):D. Sum in the tree (题解)
D. Sum in the tree 题目链接:https://codeforces.com/contest/1099/problem/D 题意: 给出一棵树,以及每个点的si,这里的si代表从i号结 ...
- 【题解】Digit Tree
[题解]Digit Tree CodeForces - 716E 呵呵以为是数据结构题然后是淀粉质还行... 题目就是给你一颗有边权的树,问你有多少路径,把路径上的数字顺次写出来,是\(m\)的倍数. ...
- 【题解】CF611H New Year and Forgotten Tree
[题解]CF611H New Year and Forgotten Tree 神题了... 题目描述 给定你一棵树,可是每个节点上的编号看不清了,只能辨别它的长度.现在用问号的个数代表每个节点编号那个 ...
- 【题解】[P4178 Tree]
[题解]P4178 Tree 一道点分治模板好题 不知道是不是我见到的题目太少了,为什么这种题目都是暴力开值域的桶QAQ?? 问点对,考虑点分治吧.直接用值域树状数组开下来,统计的时候直接往树状数组里 ...
随机推荐
- 前端防止xxs注入
思路: 去掉所有跟sql有关的标签: $(function () { $(":input").change(function () { // alert($(this ...
- Android开发之设置应用设置全屏的两种解决方法 兼容android5.0等两种解决方法
在开发中我们经常需要把我们的应用设置为全屏,有两种方法,一中是在代码中设置,另一种方法是在配置文件里改! 一.在代码中设置: 代码如下: package com.android.tutor; imp ...
- java的方法详解和总结
一.什么是方法 在日常生活中,我们所说的方法就是为了解决某件事情,而采取的解决办法 java中的方法可以理解为语句的集合,用来完成解决某件事情或实现某个功能的办法 方法的优点: 程序变得更加简短而清晰 ...
- HDU-多校2-Everything Is Generated In Equal Probability(公式+逆元)
Problem Description One day, Y_UME got an integer N and an interesting program which is shown below: ...
- The relationship between Sonarcube coverage and code branch
Once I was asked to enhance the sonarcube coverage of the class:‘jp.co.XXXXp.DltApiHttpRequestRetryH ...
- console线和RJ45
123 前言 一直以为console口和RJ45是同一种接口,but后来我发现我错了~ RJ45 先介绍一下RJ45吧 什么是RJ45? RJ45是一种接口 我们家用的网线的接口 其实就是RJ45 r ...
- MySql 实现数组根据下标获取对应值逻辑(array[i]逻辑)
在使用sql模拟一段java逻辑开发时碰到有一段逻辑为从字符串数组中根据下标获取对应的值的情况,百度了一番没有发现有类似功能的函数和现成的实现方式,经过调试弄出来了,记录下来,以备参考 //举例:从数 ...
- IDEA编写JavaWeb出现乱码,成功解决!
使用IDEA写JavaWeb项目时,总会出现编码出错等问题,比如下面这样,页面显示出来一大堆乱码,下面跟着我来操作一下,可以成功解决! 首先在IDEA安装目录下有一个:bin的文件夹,打开后找到如下两 ...
- Salesforce LWC学习(二十五) Jest Test
本篇参看: https://trailhead.salesforce.com/content/learn/modules/test-lightning-web-components https://j ...
- dict字典,以及字典的一些基本应用
dict表示方法: dict={}或d=dict() 1.字典的增:d['元素名']='元素值'.或d.setdefault('key','value') 2.字典的删:d.pop(key).或del ...