3653: 谈笑风生

链接

分析:

  $ans = min(deep[x] - 1, k) * siz[x] - 1 +\sum\limits_{y是u子树内的点}(siz[y] - 1)$

  前面的可以$O(1)$算,后面的那一部分可以dfs序+主席树维护。

  或者dfs的过程中+线段树合并。或者长链剖分。

代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<cctype>
#include<set>
#include<queue>
#include<vector>
#include<map>
using namespace std;
typedef long long LL;inline int read() {int x=0,f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;for(;isdigit(ch);ch=getchar())x=x*10+ch-'0';return x*f;
}const int N = 600005;
struct Edge{ int to, nxt; } e[N << 1];
int head[N], deep[N], fa[N], siz[N], st[N], ed[N], tr[N], En, Index, TimeIndex;
int ls[N * 20], rs[N * 20], Root[N];
LL sum[N * 20];inline void add_edge(int u,int v) {++En; e[En].to = v, e[En].nxt = head[u]; head[u] = En;++En; e[En].to = u, e[En].nxt = head[v]; head[v] = En;
}
void dfs(int u) {deep[u] = deep[fa[u]] + 1;siz[u] = 1;st[u] = ++TimeIndex;tr[TimeIndex] = u;for (int i = head[u]; i; i = e[i].nxt) {int v = e[i].to;if (v == fa[u]) continue;fa[v] = u;dfs(v);siz[u] += siz[v];}ed[u] = TimeIndex;
}
void update(int l,int r,int last,int &now,int p) {if (!now) now = ++Index;sum[now] += sum[last] + siz[tr[p]] - 1; /// !!!if (l == r) return ;int mid = (l + r) >> 1;if (deep[tr[p]] <= mid) {rs[now] = rs[last];update(l, mid, ls[last], ls[now], p);} else {ls[now] = ls[last];update(mid + 1, r, rs[last], rs[now], p);}
}
LL query(int l,int r,int last,int now,int L,int R) {if (L <= l && r <= R) return sum[now] - sum[last];int mid = (l + r) >> 1; LL res = 0;if (L <= mid) res = query(l, mid, ls[last], ls[now], L, R);if (R > mid) res += query(mid + 1, r, rs[last], rs[now], L, R);return res;
}
int main() {int n = read(), Q = read(), D;for (int i = 1; i < n; ++i) {int u = read(), v = read();add_edge(u, v);}dfs(1);for (int i = 1; i <= n; ++i) D = max(D, deep[i]);for (int i = 1; i <= n; ++i) {update(1, D, Root[i - 1], Root[i], i);}LL ans = 0;while (Q--) {int x = read(), k = read();ans = 1ll * min(deep[x] - 1, k) * (siz[x] - 1);if (deep[x] < D) ans += query(1, D, Root[st[x]], Root[ed[x]], deep[x] + 1, min(D, deep[x] + k));printf("%lld\n", ans);}return 0;
}

转载于:https://www.cnblogs.com/mjtcn/p/10288346.html

3653: 谈笑风生相关推荐

  1. [BZOJ 3653]谈笑风生

    [BZOJ 3653] 谈笑风生 题意 给定一棵 \(n\) 个点根为 \(1\) 单位权值的树以及 \(q\) 个查询, 每次查询给定 \(p\) 和 \(k\), 求满足 \(a,p\) 都是 \ ...

  2. BZOJ 3653: 谈笑风生(离线, 长链剖分, 后缀和)

    题意 给你一颗有 \(n\) 个点并且以 \(1\) 为根的树.共有 \(q\) 次询问,每次询问两个参数 \(p, k\) .询问有多少对点 \((p, a, b)\) 满足 \(p,a,b\) 为 ...

  3. 【刷题】BZOJ 3653 谈笑风生

    Description 设T 为一棵有根树,我们做如下的定义: ? 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称"a比b不知道 高明到哪里去了". ? 设a 和 b 为 ...

  4. [BZOJ 3653] 谈笑风生

    题目 给定一棵 n 个点的有根树,另有 q 次询问,每次询问给定 a.k,求有多少个点对 (b, c) 满足 a.b.c 两两不同,a.b 都是 c 的祖先且 a.b 间距离不超过 k. n, q ≤ ...

  5. BZOJ 3653 谈笑风生

    Problem BZOJ 然而是权限题,如果你像蒟蒻我一样没有权限号请上洛谷~ Solution 据说正解是主席树??? 不管了,反正主席树常数巨大,线段树虽然暴力好歹也能卡过去,而且这题数据还比较水 ...

  6. BZOJ 3653: 谈笑风生

    题目在这里呀! 个人认为是一道很好的题目,原来可持久化线段树还能这么用,看题解之前还是没有想到啦要批评!那就写个题解补偿一下? 题意 给你一棵有根树,n个节点,有q次询问,每次询问,给出两个数x(1& ...

  7. BZOJ #3653. 谈笑风生

    题目 题意: 给定一棵树. 询问给定b,kb,kb,k,现在要选择两个距离b≤kb\le kb≤k单位的点a,ca,ca,c,使得a,ba,ba,b都是ccc的祖先. 问总选择方案数. n,q≤3e5 ...

  8. 做题记录 To 2019.2.13

    2019-01-18 4543: [POI2014]Hotel加强版:长链剖分+树形dp. 3653: 谈笑风生:dfs序+主席树. POJ 3678 Katu Puzzle:2-sat问题,给n个变 ...

  9. bzoj 3653 [湖南集训]谈笑风生

    题目描述 设 T 为一棵有根树,我们做如下的定义: • 设 a 和 b 为 T 中的两个不同节点.如果 a 是 b 的祖先,那么称"a 比 b 不知道高明到哪里去了". • 设 a ...

最新文章

  1. python的flask实现接口_使用python的Flask实现一个接口mock数据(傻瓜教程)
  2. 性能测试应用领域分析
  3. 来自顶尖JAVA程序猿的焦虑,拒绝中年危机,唯有一生力学笃行
  4. pandas 读取写入保存文件
  5. 数据结构第八篇——链栈
  6. AI:一张高清长图教你读懂AI简史《1308年 → 至今》
  7. WIN7系统激活后无法正常启动
  8. C++ 指针函数和函数指针
  9. 使用日志审计查看MaxCompute执行过哪些操作
  10. 【Hadoop Summit Tokyo 2016】云上的大象
  11. java 浅堆 深堆_JVM中的一个小知识点:深堆和浅堆的概念
  12. 58同城笔试题:数组去重;分饼干(分糖果);最小路径和(leetcode64)
  13. PyTorch学习—18.标准化—Batch Normalization、Layer Normalizatoin、Instance Normalizatoin、Group Normalizatoin
  14. FISCO BCOS Solidity 智能合约 返回json对象、字典mapping、结构体
  15. MacBook上Wi-Fi抓包权限
  16. matlab画收敛曲线,3.26 面收敛处理
  17. 资源吧网站模板下载织梦cms精仿资源吧网站模板
  18. 电路课组(一)电路原理 Review 1 线性电路分析基础
  19. java pdf 修改内容_生成PDF全攻略之在已有PDF上添加内容的实现方法
  20. 来说说wow魔兽地形

热门文章

  1. 手机开发|USB调试时未弹出授权对话框
  2. VB编程:UBound获取数组上限;LBound获取数组下限-25
  3. Swaps in Permutation
  4. 服务器内存怎么看型号,怎么查看服务器内存的型号
  5. 全网火爆高颜值蓝牙耳机,低延迟游戏党必备蓝牙耳机推荐
  6. 叠氮PEG6基团N3-PEG6-alcohol,86770-69-6
  7. 服务器重装系统踩坑总结
  8. 简图-一款聚合图床源码
  9. Visual Studio - 修改主题背景颜色
  10. react-native-beacons-manager在Android上的使用 --工作笔记