南昌网络赛 Distance on the tree 主席树+树剖 (给一颗树,m次查询ui->vi这条链中边权小于等于ki的边数。)
https://nanti.jisuanke.com/t/38229
题目:
给一颗树,m次查询ui->vi这条链中边权小于等于ki的边数。
#include <bits/stdc++.h>
#define mid (l+r>>1)
#define lson (o<<1)
#define rson (o<<1|1)
#define all(x) (x).begin(),(x).end()
using namespace std;
const int N = 2e5+;
vector<int>nxt[N],len[N];
int fa[N],deep[N],id[N],siz[N],son[N],tot,s[N],top[N],ss[N];
int n,m;
int SIZ; struct TREE{
int l,r,x;
}tree[N*];
int rk[N],Tot,rt[N];
void insert(int &o,int l,int r,int data){
tree[++Tot] = tree[o];
o = Tot;
tree[o].x++;
if(l==r) return ;
if(mid>=data) insert(tree[o].l,l,mid,data);
else insert(tree[o].r,mid+,r,data);
}
int query(int lo,int ro,int l,int r,int h,int t){
if(l>=h&&r<=t) return tree[ro].x-tree[lo].x;
int ans = ;
if(mid>=h) ans += query(tree[lo].l,tree[ro].l,l,mid,h,t);
if(mid<t) ans += query(tree[lo].r,tree[ro].r,mid+,r,h,t);
return ans;
} void dfs(int u,int f) {
deep[u] = deep[f]+;
son[u] = ;
siz[u] = ;
fa[u] = f;
for(int i = ; i < nxt[u].size(); i++) {
int v = nxt[u][i];
int w = len[u][i];
if(v==f) continue;
s[v] = w;
dfs(v,u);
siz[u] += siz[v];
if(siz[son[u]]<siz[v]) son[u] = v;
}
}
void dfs2(int u,int t) {
id[u] = ++tot;
ss[id[u]] = s[u];
top[u] = t;
if(son[u]) dfs2(son[u],t);
for(auto v:nxt[u]) {
if(v==fa[u]||v==son[u]) continue;
dfs2(v,v);
}
}
int Query(int u,int v,int x) {
int tu = top[u];
int tv = top[v];
int ans = ;
while(tu!=tv) {
if(deep[tu]<deep[tv]) {
swap(u,v);
swap(tu,tv);
}
ans += query(rt[id[tu]-],rt[id[u]],,SIZ,,x);
u = fa[tu];
tu = top[u];
}
if(u==v) return ans;
if(id[u]>id[v]) swap(u,v);
ans += query(rt[id[u]],rt[id[v]],,SIZ,,x);
return ans;
} struct Q{
int u, v, w;
}Q[N];
vector<int> k;
int main() {
scanf("%d%d",&n,&m);
for(int i = ; i < n; i++) {
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
nxt[u].push_back(v);
nxt[v].push_back(u);
len[u].push_back(w);
len[v].push_back(w);
k.push_back(w);
}
for(int i = ; i <= m; i++) {
int u, v, x;
scanf("%d%d%d",&Q[i].u,&Q[i].v,&Q[i].w);
k.push_back(Q[i].w);
}
sort(all(k));
k.erase(unique(all(k)),k.end());
SIZ = k.size()+;
dfs(,);
dfs2(,);
rt[] = ;
tree[].l = tree[].r = tree[].x = ;
for(int i = ; i <= n; i++) {
rt[i] = rt[i-];
int x = lower_bound(all(k),ss[i])-k.begin()+;
insert(rt[i],,SIZ,x);
}
for(int i = ; i <= m; i++) {
int x = lower_bound(all(k),Q[i].w)-k.begin()+;
printf("%d\n",Query(Q[i].u,Q[i].v,x));
}
return ;
}
南昌网络赛 Distance on the tree 主席树+树剖 (给一颗树,m次查询ui->vi这条链中边权小于等于ki的边数。)的更多相关文章
- 2019南昌网络赛I:Yukino With Subinterval(CDQ) (树状数组套主席树)
题意:询问区间有多少个连续的段,而且这段的颜色在[L,R]才算贡献,每段贡献是1. 有单点修改和区间查询. 思路:46min交了第一发树套树,T了. 稍加优化多交几次就过了. 不难想到,除了L这个点, ...
- dp--2019南昌网络赛B-Match Stick Game
dp--2019南昌网络赛B-Match Stick Game Xiao Ming recently indulges in match stick game and he thinks he is ...
- 线段树+单调栈+前缀和--2019icpc南昌网络赛I
线段树+单调栈+前缀和--2019icpc南昌网络赛I Alice has a magic array. She suggests that the value of a interval is eq ...
- ACM-ICPC 2019南昌网络赛F题 Megumi With String
ACM-ICPC 南昌网络赛F题 Megumi With String 题目描述 给一个长度为\(l\)的字符串\(S\),和关于\(x\)的\(k\)次多项式\(G[x]\).当一个字符串\(str ...
- ACM-ICPC 2019南昌网络赛I题 Yukino With Subinterval
ACM-ICPC 2019南昌网络赛I题 Yukino With Subinterval 题目大意:给一个长度为n,值域为[1, n]的序列{a},要求支持m次操作: 单点修改 1 pos val 询 ...
- 南昌网络赛C.Angry FFF Party
南昌网络赛C.Angry FFF Party Describe In ACM labs, there are only few members who have girlfriends. And th ...
- 南昌网络赛 H The Nth Item
南昌网络赛The Nth Item 暴力快速幂+unordered_map记忆化 注意:记忆化不能写到快速幂求解函数里,不断调用函数会造成很大的时间浪费 #include<bits/stdc++ ...
- 分治维护dp——19南昌网络赛C/cf750E
南昌网络赛,是cf的原题 第一次做到这种题,所以认真想了下,每次给一个询问[L,R],要求出这个区间里有2017子序列,但是不能有2016子序列需要删掉的最少元素个数 首先如果我们之询问一小段区间[L ...
- 2019 ICPC 南昌网络赛
2019 ICPC 南昌网络赛 比赛时间:2019.9.8 比赛链接:The 2019 Asia Nanchang First Round Online Programming Contest 总结 ...
随机推荐
- linux git server 简易搭建 (ssh访问)
git的服务器搭建,如果无需权限控制,仅团队内部使用,初始化一个服务器仓库,其他人通过ssh访问这个文件夹即可.如需复杂的管理,建议使用gitlab. yum install git -y id gi ...
- maven pom.xml几个特殊的插件
1. surefire插件 Maven Surefire 插件有一个 test 目标,该目标被绑定在了 test 阶段. test 目标执行项目中所有能在 src/test/java 找到的并且文件 ...
- UVa 10829 L-Gap Substrings (后缀数组+rmq)
题意:给定上一个串,问你多少种UVU这一种形式的串,其中U不为空并且V的长度给定了. 析:枚举 U 的长度L,那么U一定是经过 0 L 2L 3L .... 其中的一个,所以求两个长度反lcp,一个向 ...
- jQuery框架-3.jQuery自定义封装插件和第三方插件
一.jQuery的封装扩展 1.jQuery中extend方法使用 (挂在到jQuery和jQuery.fn两对象身上的使用) 1.1.官方文档定义: jQuery.extend Merge th ...
- swoole1.8.0+版本异步redis安装(本实例为swoole1.8.10版本)详解
Swoole-1.8.0+版本增加了对异步Redis客户端的支持,基于redis官方提供的hiredis库实现.Swoole提供了__call魔术方法,来映射绝大部分Redis指令(本次安装实例为sw ...
- linux相关文章链接
薄荷开元网 http://www.mintos.org/
- MySQL性能调优与架构设计——第10章 MySQL数据库Schema设计的性能优化
第10章 MySQL Server性能优化 前言: 本章主要通过针对MySQL Server(mysqld)相关实现机制的分析,得到一些相应的优化建议.主要涉及MySQL的安装以及相关参数设置的优化, ...
- Python WebDriver 文件上传(二)
今天补充一种文件上传的方法 主要是因为工作中使用SendKeys方法不稳定,具体方法见: Python WebDriver 文件上传(一) 这种方法直接通过命令行执行脚本时没有问题,可以成功上传,但是 ...
- 企业搜索引擎开发之连接器connector(二十二)
下面来分析线程执行类,线程池ThreadPool类 对该类的理解需要对java的线程池比较熟悉 该类引用了一个内部类 /** * The lazily constructed LazyThreadPo ...
- CentOS 新系统后配置
1. 网络配置 略 1.2 ip_froward 查看 sysctl -a | grep ip_ 修改 vi /etc/sysctl.conf net.ipv4.ip_forward = 1 最大使用 ...