
Distance in Tree (CodeForces - 161D,点分治)
发布日期:2021-05-04 06:49:42
浏览次数:44
分类:精选文章
本文共 1926 字,大约阅读时间需要 6 分钟。
一.题目链接:
二.题目大意:
给一颗无根树,问有多少个点对,使其之间的距离为 k.
三.分析:
点分治的模板题.
这里只是存个板子(溜走 ~~
四.代码实现:
#include#include using namespace std;const int M = (int)5e4;int n, k, ans;int cnt;int head[M + 5];struct node{ int v, nx;}Edge[M * 2 + 5];int dis[M + 5];bool vis[M + 5];int rt, sz[M + 5], Max[M + 5];void init(int n){ Max[0] = n, ans = cnt = 0; for(int i = 1; i <= n; ++i) { vis[i] = 0; head[i] = -1; }}void add(int u, int v){ Edge[cnt].v = v; Edge[cnt].nx = head[u]; head[u] = cnt++;}void get_rt(int u, int fa){ sz[u] = 1, Max[u] = 0; for(int i = head[u]; ~i; i = Edge[i].nx) { int v = Edge[i].v; if(v == fa || vis[v]) continue; get_rt(v, u); sz[u] += sz[v]; Max[u] = max(Max[u], sz[v]); } Max[u] = max(Max[u], n - sz[u]); if(Max[u] < Max[rt]) rt = u;}void get_dis(int u, int fa, int d){ for(int i = head[u]; ~i; i = Edge[i].nx) { int v = Edge[i].v; if(v == fa || vis[v]) continue; dis[++cnt] = d + 1; get_dis(v, u, dis[cnt]); }}int get_ans(int u, int d){ dis[cnt = 1] = d, get_dis(u, 0, d), sort(dis + 1, dis + cnt + 1); int l = 1, ans = 0; while(l < cnt && dis[l] + dis[cnt] < k) ++l; while(l < cnt && dis[l] <= k - dis[l]) { ans += upper_bound(dis + l + 1, dis + cnt + 1, k - dis[l]) - lower_bound(dis + l + 1, dis + cnt + 1, k - dis[l]); ++l; } return ans;}void dfs(int u){ vis[u] = 1; ans += get_ans(u, 0); for(int i = head[u]; ~i; i = Edge[i].nx) { int v = Edge[i].v; if(vis[v]) continue; ans -= get_ans(v, 1); n = sz[v], rt = 0, get_rt(v, u); dfs(rt); }}int main(){ scanf("%d %d", &n, &k); init(n); for(int i = 0, u, v; i < n - 1; ++i) { scanf("%d %d", &u, &v); add(u, v); add(v, u); } rt = 0, get_rt(1, 0); dfs(rt); printf("%d\n", ans); return 0;}
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年03月31日 16时57分50秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
爬取网易科技滚动新闻
2019-03-05
vuex modules
2019-03-05
sleep、wait、yield、join——简介
2019-03-05
web项目配置
2019-03-05
基于单片机可控音乐流水灯控制设计-全套资料
2019-03-05
基于单片机简易信号误差分析设计-全套资料
2019-03-05
基于单片机简易脉搏测量仪系统设计-毕设课设资料
2019-03-05
Javascript中String支持使用正则表达式的四种方法
2019-03-05
纯客户端页面关键字搜索高亮jQuery插件
2019-03-05
Java温故而知新-反射机制
2019-03-05
eclipse引用sun.misc开头的类
2019-03-05
Servlet2.5的增删改查功能分析与实现------删除功能(四)
2019-03-05
Session验证码的实现(2018-7-3)
2019-03-05
spring启动错误:Could not resolve placeholder
2019-03-05
对PostgreSQL数据库结构的宏观理解
2019-03-05
查询某表格上次进行vacuum的时间
2019-03-05
invalid byte sequence for encoding
2019-03-05
redis向数组中添加值并查看数组长度
2019-03-05
JS编写一个函数,计算三个不同数字的大小,按从小到大顺序打印(穷举法)
2019-03-05
sqlplus的基本使用
2019-03-05