P4178 Tree

P4178 Tree

题意:

给定一棵 n 个节点的树,每条边有边权,求出树上两点距离小于等于 k 的点对数量。

题解:

点分治的模板题是求等于K的路径条数
本题是求小于等于K的路径条数,我们只需要改变统计答案即可
原本统计答案是对一个路劲长度len,判断K-len在之前的子树中出现多少次,用f数组来记录,直接查看f[k-len]等于多少即可
现在统计答案是对一个路径长度len,判断小于等于K-len的数在之前的子树中出现多少次,统计区间数量,我们可以用树状数组来实现,对于每个len我们插入数组f[]其中,然后求1~K-len的区间查询

代码:

详细看代码

#include<bits/stdc++.h>
#define MAXN 40005
#define MAXK 20005
using namespace std;int N,K;struct edge{int v,w;edge(int v=0, int w=0):v(v), w(w){}
};vector<edge> adj[MAXN];//
int fw[MAXK];
int lbt(int x){return x & (-x);
}
int getsum(int x){int ans = 0;for(;x>0;x-=lbt(x)){ans += fw[x];}return ans;
}void change(int x, int dv){for(;x<=K;x+=lbt(x)){fw[x] += dv;}
}//
int sz[MAXN];
bool vis[MAXN];
int rt;
void dfs_rt(int u, int fa, int tot){//O(tot)求根 sz[u] = 1;int v, n = 0;for(int k=0;k<adj[u].size();k++){v = adj[u][k].v;if(v==fa || vis[v]) continue;dfs_rt(v, u, tot);sz[u] += sz[v];n = max(n, sz[v]);}n = max(n, tot-sz[u]);if(n*2 <= tot) rt = u;
}void dfs_sz(int u, int fa){//O(tot)求子树sz[u] = 1;int v, n = 0;for(int k=0;k<adj[u].size();k++){v = adj[u][k].v;if(v==fa || vis[v]) continue;dfs_sz(v, u);sz[u] += sz[v];}
}int d[MAXN], cnt = 0;
void dfs_dis(int u, int fa, int dis){//O(tot)d[++cnt] = dis;//记录距离 int v,w;for(int k=0;k<adj[u].size();k++){v = adj[u][k].v;w = adj[u][k].w;if(v==fa || vis[v]) continue;dfs_dis(v, u, dis + w);}
}void dfs_clear(int u, int fa, int dis){//O(tot)清零 if(dis) change(dis, -1);int v,w;for(int k=0;k<adj[u].size();k++){v = adj[u][k].v;w = adj[u][k].w;if(v==fa || vis[v]) continue;dfs_clear(v, u, dis + w);}
}int work(int u, int tot){   dfs_rt(u, 0, tot);u = rt;dfs_sz(u, 0);vis[u] = 1;int v,w;//solve/*求出每个点到根节点的距离,然后记录到数组d然后对于d[i],查询0~K-d[i]区间大小,用树状数组实现 如果d[i]<=K,那么d[i]本身也符合条件 将数组d插入到树状数组当以一个点为根的一轮结束时记得情况数组树状数组 */ int ans = 0;for(int k=0;k<adj[u].size();k++){v = adj[u][k].v;w = adj[u][k].w;if(vis[v]) continue;cnt = 0;dfs_dis(v, u, w);for(int i=1;i<=cnt;i++){if(d[i] <= K) ++ans;ans += getsum(max(0,K-d[i]));}for(int i=1;i<=cnt;i++){change(d[i], +1);}}dfs_clear(u,0,0);//手动清空 //for(int k=0;k<adj[u].size();k++){v = adj[u][k].v;//w = adj[u][k].w;if(vis[v]) continue;ans += work(v,sz[v]);}   return ans;
}int main(){cin>>N;int u,v,w;for(int i=1;i<N;i++){cin>>u>>v>>w;adj[u].push_back(edge(v,w));adj[v].push_back(edge(u,w));}cin>>K;cout<<work(1, N)<<endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YBTOJ:彩色圆环

文章目录前言题目描述InputOutputSample InputSample Output解析代码前言 尽信书&#xff0c;则不如无书 题目描述 Input 仅有一行&#xff0c;该行给出依次两个正整数N, M&#xff0c;分别表示宝石的个数和宝石在变化时可能变成的颜色种类数。 Output 应仅有一行&#xff0…

【2019CSP-J 普及组题解】数字游戏(number),公交换乘(transfer),纪念品(souvenir),加工领奖(work) CSP普及游记

文章目录T1&#xff1a;数字游戏题目CODET2&#xff1a;公交换乘题目CODET3&#xff1a;纪念品题目题解CODET4&#xff1a;加工领奖题目题解CODE关于普及组的想法&游记T1&#xff1a;数字游戏 题目 小 K 同学向小 P 同学发送了一个长度为 8 的 01 字符串来玩数字游戏&…

搭建基于Docker社区版的Kubernetes本地集群

Kubernetes的本地集群搭建是一件颇费苦心的活&#xff0c;网上有各种参考资源&#xff0c;由于版本和容器的不断发展&#xff0c;搭建的方式也是各不相同&#xff0c;这里基于Docker CE的18.09.0版本&#xff0c;在Mac OS、Win10下分别搭建了一次。一、Mac OS下搭建安装Docker …

【做题记录】统计区间(哈希/扫描线)

交题链接 给你一个长度为 \(n(n\le 10^6)\) 的序列&#xff0c;其中每个元素都在 \([1,n]\) 范围中。 询问有多少个区间满足区间中的元素都恰好出现 \(2\) 次。 \(\texttt{solution}~\texttt{1:}\) 哈希 我们考虑如果元素个数 \(\le 64\) 时我们怎么做&#xff1a; 给每个元素分…

2021牛客OI赛前集训营-交替【生成函数】

正题 题目链接:https://ac.nowcoder.com/acm/contest/20108/B 题目大意 给出一个长度为nnn的序列aaa&#xff0c;每次 如果nnn是偶数&#xff0c;则对于所有的i<ni<ni<n令新的ai′ai′ai1′a_ia_ia_{i1}ai′​ai′​ai1′​如果nnn是奇数&#xff0c;则对于所有的i…

Infinite Tree

Infinite Tree 题意&#xff1a; 题解&#xff1a; 参考博客 看了好一阵子才明白。。。emm。 我们先按照题意画出一部分树 我们先不考虑复杂度&#xff0c;这题应该怎么做&#xff1f; 题目给了每个点的权值w[i]&#xff0c;问一个点到所有的节点路径长度*点权之和最小是多少…

模板:高斯消元

文章目录前言解析step1 选择主元代码step2 消元step3代码完整代码高斯消元&#xff0c;就是按照高斯的方法消元 前言 考虑我们手算是如何解多元线性方程组的 要么加减消元&#xff0c;要么代入消元 但显然对于编程来说&#xff0c;加减消元更具有普适性 如何进行呢&#xff1f…

IdentityServer4-从数据库获取User登录并对Claims授权验证(五)

本节将在第四节基础上介绍如何实现IdentityServer4从数据库获取User进行验证&#xff0c;并对Claim进行权限设置。一、新建Web API资源服务&#xff0c;命名为ResourceAPI&#xff08;1&#xff09;新建API项目&#xff0c;用来进行user的身份验证服务。&#xff08;2&#xff…

周末狂欢赛1(玩游戏/Game,函数,JOIOI王国)

狂欢1T1&#xff1a;玩游戏 / Game题目题解代码实现T2&#xff1a;函数题目题解代码实现T3&#xff1a;JOIOI王国题目题解代码实现T1&#xff1a;玩游戏 / Game 题目 ljcc 和他的学妹在玩游戏&#xff0c;这个游戏共有 n 轮&#xff0c;在第 i 轮获胜会获得 i 分&#xff0c;…

CF1286D-LCC【动态dp,数学期望】

正题 题目链接:https://www.luogu.com.cn/problem/CF1286D 题目大意 nnn个粒子&#xff0c;第iii个在xix_ixi​&#xff0c;速度是viv_ivi​&#xff0c;有pi100\frac{p_i}{100}100pi​​的概率朝左飞&#xff0c;有1−pi1001-\frac{p_i}{100}1−100pi​​的概率往右飞&#x…

CF613D Kingdom and its Cities

CF613D Kingdom and its Cities 题目&#xff1a; 给定一棵有n 个节点的树&#xff0c;树上有一些关键点(key)。接下来有q组询问&#xff0c;每次给出ki 个key&#xff0c;要求删去一些点&#xff0c;使得这些key不相连。要求删去的最少的点数。 1<n<100000 1<q<…

YBTOJ洛谷P3750:分手是祝愿(期望dp)

传送门 文章目录解析代码解析 首先&#xff0c;开关开关两次等于没动&#xff0c;所有对于一个解来说&#xff0c;开关的状态只有开与不开之分 接下来的一个关键点是&#xff1a;每一个开关的效果无法被其他开关操作的组合代替 所以这个题应该只有唯一解 那么我们可以不计代价…

用ABP只要加人即可马上加快项目进展(二) - 分工篇 - BDD实战篇 - .NET Core里跑Specflow...

这是<如何用ABP框架快速完成项目 >系列中的一篇文章。BDD很赞&#xff01;比TDD先进很多&#xff0c;能够大大提高编码效率。上一篇文章说了如何在.NET Core里安装Specflow. 然而文章成果只到了hello world级别。要想真的和实际业务结合&#xff0c;比如要能够IOC new cl…

【做题记录】CodeForces 做题记录

链接放的是洛谷上的链接&#xff0c;难度就是 CF 上的评分。 <details><summary>$\texttt{solution}$</summary></details> CF10D LCIS 难度&#xff1a;\(\tt{2800}\) 求两个串的最长公共上升子序列。\(n\le 500\) $\texttt{solution}$ 严重虚高题&am…

周末狂欢赛2(冒泡排序,概率充电器,不勤劳的图书管理员)

狂欢2T1&#xff1a;冒泡排序题目题解CODET2&#xff1a;概率充电器题目题解CODET3&#xff1a;不勤劳的图书管理员题目题解CODE我不这么认为。。。。 T1&#xff1a;冒泡排序 题目 下面是一段实现冒泡排序算法的 C代码&#xff1a; for(int i1; i<n; i)for(int j1; j&l…

P5659-[CSP-S2019]树上的数【贪心】

正题 题目链接:https://www.luogu.com.cn/problem/P5659 题目大意 给出nnn个点的一棵树&#xff0c;每个节点上有一个数字&#xff0c;你每次可以选择一条边删除然后交换连接的两个点的数字&#xff0c;在删完所有数字后设pip_ipi​表示数字iii所在节点编号&#xff0c;要求使…

Mine Sweeper II

Mine Sweeper II 题意&#xff1a; 给你两个大小为 n * m 的扫雷图 A, B&#xff0c;要求通过最多 n * m/2 次转换&#xff08;转换指 把一个不是雷的格子变成雷&#xff0c; 或者把一个是雷的格子变成空白格&#xff09;&#xff0c;使得 B图的值 和 A图的值相等&#xff08…

YBTOJ洛谷P3195:玩具装箱(斜率优化dp)

传送门 文章目录前言解析代码前言 斜率优化dp&#xff0c;就是利用斜率优化的dp &#xff08;逃&#xff09; 解析 第一道斜优的题 分析题目 设sumisum_isumi​为1-i的c的前缀和 容易写出dp转移式&#xff1a; dpimin(dpj(sumi−sumji−j−1−L)2)dp_imin(dp_j(sum_i-sum_ji-…

01.微服务系列介绍

微服务系列实践 .NET CORE在开始之前呢&#xff0c;还是得废话一下&#xff0c;毕竟还是需要介绍一下这个系列我们要实现什么样的一套服务架构&#xff0c;也让大家能初步的有一个了解&#xff0c;后续实践起来也有一个完整的概念&#xff0c;相对也会容易的多。互联网架构演变…

【做题记录】Atcoder 做题记录

链接放的是洛谷上的链接。 <details><summary>$\texttt{solution}$</summary></details> ARC083F \(n\times n\) 的正方形上有 \(2n\) 个小球&#xff0c;第 \(i\) 个在 \((x_i,y_i)\)。 有 \(n\) 个 A 类机器人&#xff0c;第 \(i\) 个在 \((0,i)\)&a…