南昌网络赛 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 总结 ...
随机推荐
- 关于Android控件EditText的属性InputType的一些经验,java组合多个参数
关于Android控件EditText的属性InputType的一些经验 2013-11-14 15:08:02| 分类: 默认分类|举报|字号 订阅 1.InputType属性在代码中 ...
- win2003 ent 64 + mssql ent 64
1.打win2003补丁(取消IE8.0)2.msconfig->boot.int->高级中,将内核改成83.将cd1,cd2,高到Servers,Tools目录中,并保证Servers, ...
- docker-compose示例与命令介绍
一.docker-compose.yml示例 version: ‘2‘ #指定compose版本 services: log: #服务名称 image: vmware/harbor-log #指定镜像 ...
- 优秀前端工程师必备: 我要一个新窗口: js开新窗的2种姿势
1.<a href="https://www.cnblogs.com/" title="博客园">当前页面打开博客园</a> js代码等 ...
- 前端福利之HTML5 UTF-8 中文乱码(转)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 如何在Mirth Connect中创建和调用自定义Java代码
0-前言 本文章将向您展示如何创建自定义Java类,将其编译/打包到JAR中,将其包含在Mirth Connect在,并在JavaScript中调用它,您可以从任何JavaScript上下文调用自定义 ...
- [转]解决Mysql InnoDB: Failing assertion: ret || !assert_on_error问题
国庆回来后,发现mysql停止服务了,没办法继续启动了.查看日志,看到: 131008 09:56:03 mysqld_safe Starting mysqld daemon with databas ...
- Ubuntu 16.04.2 LTS 安装 jdk1.6 和 tomcat6 (二)
上一篇记录和分享了jdk1.6 在Ubuntu 16.04.2 环境下的安装配置,本文开始安装和配置tomcat 6 2 安装tomcat http://tomcat.apache.org ...
- vs2015上使用github进行版本控制
我是用的是vs2015企业版 一.首先创建项目,右下角选择新建git存储库 二.在工具栏选择团队-管理连接,打开团队资源管理器,点击同步 . 三.选择下面的发布选项 四.在gitgub上新建仓库,得到 ...
- JS三个编码函数和net编码System.Web.HttpUtility.UrlEncode比较
JS三个编码函数和net编码比较 总结 1.escape.encodeUri.encodeUriComponent均不会对数字.字母进行编码.2.escape:对某些字符(如中文)进行unicode编 ...