南昌网络赛 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 总结 ...
随机推荐
- 矩阵乘法np.dot()及np.multiply()以及*
转载自 https://blog.csdn.net/u012609509/article/details/70230204 Python中的几种矩阵乘法 1. 同线性代数中矩阵乘法的定义: np.do ...
- JavaScript 对象笔记
1. JS 将对象看成是属性的无序集合, 每个属性是一个key/value, 属性名是字符串, 值为任意类型; 对象除了键值对, 还从一个称为 "原型" 的 对象 继承属性(为啥是 ...
- jfinal框架教程
jfinal框架教程 下面通过一个小例子了解jfinal的结构和特点 1.建数据库(我用的是oracle数据库,其他的相对也差不多) -- Create table create table CLAS ...
- android 播放视频时切换全屏隐藏状态栏
1. Demo: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstance ...
- Mysql 关于not exists一例
场景: 业务上需要做一个查询,因为是Web及时响应,所以对响应时间有要求,原业务场景是需要从无库存订单中剔除绑定闲置库存,因单条sql查询实现复杂,故考虑用差集方式: select a.col1, a ...
- 团体程序设计天梯赛L2-023 图着色问题 2017-04-17 09:28 269人阅读 评论(0) 收藏
L2-023. 图着色问题 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 图着色问题是一个著名的NP完全问题.给定无向图 G ...
- Window vista 以上制作自定义证书并为端口配置ssl
此处的关键在于证书需要分两步,不然在配置ssl时总会有错误.也许makecert命令也会有些玄机,但是管他呢,请按以下步骤和命令配置,几分钟就可成功: 证书制作: 1, 在开始/所有程序(或其他地方 ...
- 【PAT】1063. Set Similarity (25) 待改进
Given two sets of integers, the similarity of the sets is defined to be Nc/Nt*100%, where Nc is the ...
- java中父类的静态方法不能被重写
Java中父类的静态方法确实不能被重写的,但是有的人可能去做实验发现在子类中去重写父类static方法时,并没什么问题.这里我来具体解释下. public class Parent { public ...
- Android-Camera+SurfaceView
Camera相机是属于硬件,每台设备的Camera硬件配置的参数都是不一样的,Camera通常是用来拍照,扫描二维码等等 AndroidManifest.xml配置Camera需要的权限: <! ...