P3242 [HNOI2015] 接水果(整体二分、扫描线)

P3242 [HNOI2015] 接水果

给定一棵树,定义给定了ppp个盘子,每个盘子是树上u,vu, vu,v两点的路径,且盘子有权值,定义水果,水果也是树上u,vu, vu,v两点间的路径。

qqq个询问,每次给定u,v,ku, v, ku,v,k,表示可以接住水果u,vu, vu,v的盘子中权值第kkk小的权值是什么,输出权值,一个盘子可以接住一个水果,当且仅当盘子是水果的子路径。

考虑如何求是否覆盖,对每个点dfsdfsdfs序得到[sti,edi][st_i, ed_i][sti,edi],对于(u,v),stu≤stv(u, v), st_u \le st_v(u,v),stustv

  • lca(u,v)=ulca(u, v) = ulca(u,v)=u,则只要有一个点dfsdfsdfs序在[stv,edv][st_v, ed_v][stv,edv],并且有一个点dfsdfsdfs序在[1,stz−1],[edz+1,n][1, st_z - 1], [ed_z + 1, n][1,stz1],[edz+1,n],即为内含,其中zzzu,vu, vu,v路径上uuu的儿子。
  • lca(u,v)≠ulca(u, v) \ne ulca(u,v)=u,则只要有一个点dfsdfsdfs序在[stu,edu][st_u, ed_u][stu,edu],并且有一个点dfsdfsdfs序在[stv,edv][st_v, ed_v][stv,edv],即为内含。

可以把所有矩形的差分,类似扫描线离线一下,然后整体二分即可。

#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 10;int head[N], to[N << 1], nex[N << 1], cnt = 1;int son[N], dep[N], top[N], sz[N], st[N], ed[N], fa[N], tot;int ans[N], sum[N], n, P, Q, num;struct Res {int op, x, l, r, k, id;bool operator < (const Res &t) const {return x != t.x ? x < t.x : op < t.op;}
}q[N * 5], q1[N * 5], q2[N * 5];inline int lowbit(int x) {return x & (-x);
}void update(int rt, int v) {while (rt <= n) {sum[rt] += v;rt += lowbit(rt);}
}int query(int rt) {int ans = 0;while (rt) {ans += sum[rt];rt -= lowbit(rt);}return ans;
}void add(int x, int y) {to[cnt] = y;nex[cnt] = head[x];head[x] = cnt++;
}void dfs1(int rt, int f) {fa[rt] = f, sz[rt] = 1, dep[rt] = dep[f] + 1, st[rt] = ++tot;for (int i = head[rt]; i; i = nex[i]) {if (to[i] == f) {continue;}dfs1(to[i], rt);sz[rt] += sz[to[i]];if (!son[rt] || sz[to[i]] > sz[son[rt]]) {son[rt] = to[i];}}ed[rt] = tot;
}void dfs2(int rt, int tp) {top[rt] = tp;if (!son[rt]) {return ;}dfs2(son[rt], tp);for (int i = head[rt]; i; i = nex[i]) {if (to[i] == fa[rt] || to[i] == son[rt]) {continue;}dfs2(to[i], to[i]);}
}int lca(int u, int v) {while (top[u] != top[v]) {if (dep[top[u]] < dep[top[v]]) {swap(u, v);}u = fa[top[u]];}return dep[u] < dep[v] ? u : v;
}int get(int u, int v) {while (top[u] != top[v]) {if (fa[top[v]] == u) {return top[v];}v = fa[top[v]];}return son[u];
}void solve(int L, int R, int l, int r) {if (L > R) {return ;}if (l == r) {for (int i = L; i <= R; i++) {if (q[i].op == 2) {ans[q[i].id] = l;}}return ;}int mid = l + r >> 1, cnt1 = 0, cnt2 = 0;for (int i = L; i <= R; i++) {if (q[i].op != 2) {if (q[i].k <= mid) {update(q[i].l, q[i].op), update(q[i].r + 1, -q[i].op);q1[++cnt1] = q[i];}else {q2[++cnt2] = q[i];}}else {int cur = query(q[i].l);if (cur >= q[i].k) {q1[++cnt1] = q[i];}else {q[i].k -= cur;q2[++cnt2] = q[i];}}}for (int i = 1; i <= cnt1; i++) {if (q1[i].op != 2) {update(q1[i].l, -q1[i].op), update(q1[i].r + 1, q1[i].op);}}for (int i = 1; i <= cnt1; i++) {q[L + i - 1] = q1[i];}for (int i = 1; i <= cnt2; i++) {q[L + cnt1 + i - 1] = q2[i];}solve(L, L + cnt1 - 1, l, mid), solve(L + cnt1, R, mid + 1, r);
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);scanf("%d %d %d", &n, &P, &Q);for (int i = 1, u, v; i < n; i++) {scanf("%d %d", &u, &v);add(u, v);add(v, u);}dfs1(1, 0);dfs2(1, 1);for (int i = 1, u, v, x; i <= P; i++) {scanf("%d %d %d", &u, &v, &x);if (st[u] > st[v]) {swap(u, v);}// u < v;int cur = lca(u, v);if (cur == u) {int z = get(u, v);// [1, st[z] - 1]if (st[z] != 1) {q[++num] = {1, 1, st[v], ed[v], x, 0};q[++num] = {-1, st[z], st[v], ed[v], x, 0};}// [ed[z] + 1, n]if (ed[z] != n) {q[++num] = {1, st[v], ed[z] + 1, n, x, 0};q[++num] = {-1, ed[v] + 1, ed[z] + 1, n, x, 0};}}else {q[++num] = {1, st[u], st[v], ed[v], x, 0};q[++num] = {-1, ed[u] + 1, st[v], ed[v], x, 0};}}for (int i = 1, u, v, k; i <= Q; i++) {scanf("%d %d %d", &u, &v, &k);if (st[u] > st[v]) {swap(u, v);}q[++num] = {2, st[u], st[v], 0, k, i};}sort(q + 1, q + 1 + num);solve(1, num, 0, 1000000000);for (int i = 1; i <= Q; i++) {printf("%d\n", ans[i]);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC 、Struts的区别

先说结论&#xff1a;目前Spring MVC已经一统江山&#xff0c;Struts正在被抛弃 1、Spring MVC原理 Spring 体系&#xff1a; Spring MVC工作流程图 SpringMVC的工作流程描述 1. 用户向服务器发送请求&#xff0c;请求被Spring前端控制Servelt DispatcherServlet捕获&#x…

P3700 [CQOI2017]小Q的表格(反演、分块)

P3700 [CQOI2017]小Q的表格 给定一个大小为nnn \times nnn的表格&#xff0c;初始时i,ji, ji,j位置上填的是f(i,j)ijf(i, j) i \times jf(i,j)ij&#xff0c;有mmm个操作&#xff0c;每次操作给定a,b,x,ka, b, x, ka,b,x,k&#xff0c;把格子a,ba, ba,b上的值改成xxx&#xf…

基于Asp.Net Core MVC和AdminLTE的响应式管理后台之侧边栏处理

说明&#xff1a;.NET Core版本为:2.2 AdminLTE版本为:2.4.18 Bootstrap版本为:3.4.1 font-awesome版本为:4.7.01、新建项目&#xff1a;AdminLteDemo&#xff0c;添加区域Admin 在Areas/Admin/Views文件夹添加文件并分别添加如下代码&#xff1a;_ViewImports.cshtmladdTagHel…

Spring boot——起步依赖

一、起步依赖 1、是什么 本质上是一个Maven项目对象模型&#xff08;Project Object Model&#xff0c; POM&#xff09;&#xff0c; 定义了对其他库的传递依赖&#xff0c;这些东西加在一起即支持某项功能。 比如&#xff1a; spring-boot-dependencies^ spring-boot-pare…

[翻译] ASP.NET Core 3.0 的新增功能

全文翻译自微软官方文档英文版 Whats new in ASP.NET Core 3.0本文重点介绍了 ASP.NET Core 3.0 中最重要的更改&#xff0c;并提供相关文档的连接。BlazorBlazor 是 ASP.NET Core 中的一个新的框架&#xff0c;用于使用 .NET 构建交互式的客户端 Web UI&#xff1a;使用 C# 而…

Convolution(2021牛客暑期多校训练营4)

Convolution 定义a⊕babgcd⁡(a,b)2a \oplus b \frac{a \times b}{\gcd(a, b) ^ 2}a⊕bgcd(a,b)2ab​&#xff0c;bm∑i1n∑j1naijc[i⊕jm]b_m \sum\limits_{i 1} ^{n} \sum\limits_{j 1} ^{n}a_i \times j ^ c [i \oplus j m]bm​i1∑n​j1∑n​ai​jc[i⊕jm]&#xff0…

Sprig boot自动配置

1、概述 Spring Boot是Spring旗下众多的子项目之一&#xff0c;其理念是约定优于配置&#xff0c;它通过实现了自动配置&#xff08;大多数用户平时习惯设置的配置作为默认配置&#xff09;的功能来为用户快速构建出标准化的应用。Spring Boot的特点可以概述为如下几点&#x…

E. Mocha and Stars(莫比乌斯反演、简单dp)

E. Mocha and Stars ∑a1l1r1∑a2l2r2⋯∑anlnrn[a1a2⋯an≤m][gcd⁡(a1,a2,…,an)1]\sum_{a_1 l_1} ^{r_1} \sum_{a_2 l_2} ^{r_2} \dots \sum_{a_n l_n} ^{r_n} [a_1 a_2 \dots a_n \le m][\gcd(a_1, a_2, \dots, a_n) 1]\\ a1​l1​∑r1​​a2​l2​∑r2​​⋯an​ln…

.NET Core 3.0稳定版发布

一年一度的 .NET 开发者盛会 .NET Conf 2019 已正式开始了&#xff08;举办时间为 9.23-9.25&#xff09;。大会第一天最重磅也是最激动人心的消息莫过于 .NET Core 3.0 稳定版的发布。.NET 项目管理总监 Scott Hunter 在大会宣布了这则消息&#xff0c;并在主题演讲环节围绕 .…

深入理解 Spring Boot Starters 原理(手写Spring boot Start)

一、Spring Boot Starter诞生原因 Spring Boot Starter是在SpringBoot组件中被提出来的一种概念&#xff0c;stackoverflow上面已经有人概括了这个starter是什么东西&#xff0c;想看完整的回答戳这里 Starter POMs are a set of convenient dependency descriptors that you …

FFT字符串匹配(解决通配符问题)

FFT字符串匹配 定义字符串下标从000&#xff0c;开始&#xff0c;有文本串AAA长度为nnn&#xff0c;模式串BBB长度为mmm&#xff0c;我们可以考虑一个函数f(x,y)A(x)−B(y)f(x, y) A(x) - B(y)f(x,y)A(x)−B(y)。 我们设F(x)(x≥m−1)∑i0m−1f(x−m1i,i)F(x)(x \ge m - 1) …

记一次中小公司的研发问题

作者&#xff1a;zollty&#xff0c;资深程序员和架构师&#xff0c;私底下是个爱折腾的技术极客&#xff0c;架构师社区合伙人&#xff01;一、一些不好的现状&#xff0c;及对应的改进方法1、前后端代码绑定在一起&#xff0c;很难维护&#xff0c;前端UI做得太差&#xff0c…

命令行操作mysql

1、通过命令行连接mysql&#xff1a; 1、输入命令&#xff1a;mysql -h localhost&#xff08;服务IP地址&#xff09; -u root&#xff08;用户名&#xff09; -P 3306&#xff08;服务端口&#xff09;-p 2、输入密码 2、显示数据库、表&#xff1a; show databases; //…

2021CCPC华为云挑战赛:HDU 7091 重叠的子串(SAM + 线段树合并)

重叠的子串 给定一个长度为n(1≤∣s∣≤105)n(1 \le \mid s \mid \le 10 ^ 5)n(1≤∣s∣≤105)的只由小写字母构成的字符串sss&#xff0c;有m,(1≤m≤106)m, (1 \le m \le 10 ^ 6)m,(1≤m≤106)个询问&#xff1a; 每次询问给定l,rl, rl,r&#xff0c;问sss是否存在一个字串…

ASP.NET Core 3.0 使用gRPC

一.简介gRPC 是一个由Google开源的&#xff0c;跨语言的&#xff0c;高性能的远程过程调用&#xff08;RPC&#xff09;框架。gRPC使客户端和服务端应用程序可以透明地进行通信&#xff0c;并简化了连接系统的构建。它使用HTTP/2作为通信协议&#xff0c;使用 Protocol Buffers…

mysql 1030 error:Got error 28 from storage engine

最近生产应用连不上生产环境数据库&#xff0c;使用命令行连上去之后&#xff0c;执行命令出现1030 error。 故Google之&#xff0c;解决方案如下。 mysql 1030 error 是因为没有足够的空间&#xff0c;清理磁盘空间即可恢复正常使用。 然后追踪发现&#xff0c;磁盘空间为99G&…

Codeforces Round #739 (Div. 3)(AK实况)

Codeforces Round #739 (Div. 3) A. Dislike of Threes 找到第kkk个既不是333的倍数&#xff0c;个位数上也不是333的数&#xff0c;也已预处理然后O(1)O(1)O(1)输出&#xff0c;也可直接forforfor循环暴力。 #include <bits/stdc.h>using namespace std;int main() {/…

利用Helm简化Kubernetes应用部署(2)

目录定义Charts 使用Helm部署Demo Helm常用操作命令 定义Charts回到之前的“charts”目录&#xff0c;我们依次进行解读并进行简单的修改。Chart.yaml配置示例&#xff1a;apiVersion: v1 appVersion: "1.1" description: A demo Helm chart for Kubernetes name:…

linux查看磁盘空间命令

Linux 查看磁盘空间可以使用 df 和 du 命令。 df df 以磁盘分区为单位查看文件系统&#xff0c;可以获取硬盘被占用了多少空间&#xff0c;目前还剩下多少空间等信息。 例如&#xff0c;我们使用df -h命令来查看磁盘信息&#xff0c; -h 选项为根据大小适当显示&#xff1a; …

Visual Studio 2019 16.3 正式发布,支持 .NET Core 3.0

微软正式发布了 Visual Studio 2019 16.3 版本&#xff0c;主要更新内容如下&#xff1a;.NET Core 3.0Visual Studio 版本 16.3 包括对 .NET Core 3.0 的支持。注意&#xff1a;如果使用的是 .NET Core 3.0&#xff0c;则需要使用 Visual Studio 16.3 或更高版本。.NET Core 桌…