接水果(fruit)
接水果(fruit)
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#define maxn 320005
using namespace std;
int n,P,Q,head[maxn],tot,sc,dft[maxn],dfn[maxn];
int deep[maxn],f[maxn][],top,Max,q[maxn],ans[maxn];
int tr[maxn],tx[maxn],tp,cnt,dy[maxn];
map<int,int>ls;
struct node{
int v,nex;
}e[maxn*];
struct sq{
int fl,pl,a,b,v,val;
}a[maxn],b[maxn];
void lj(int t1,int t2){
e[++tot].v=t2;e[tot].nex=head[t1];head[t1]=tot;
}
void dfs(int k,int fa){
dft[k]=++sc;deep[k]=deep[fa]+;f[k][]=fa;
for(int i=head[k];i;i=e[i].nex){
if(e[i].v!=fa)dfs(e[i].v,k);
}
dfn[k]=sc;
}
int Lca(int u,int v){
if(deep[u]<deep[v])swap(u,v);
for(int x=;x>=;x--)if(deep[f[u][x]]>=deep[v])u=f[u][x];
for(int x=;x>=;x--)if(f[u][x]!=f[u][x])u=f[u][x],v=f[v][x];
return u==v?u:f[u][];
}
bool cmp(sq a,sq b){
return a.pl<b.pl||(a.pl==b.pl&&a.fl<b.fl);
}
void add(int i,int v){
for(;i<=n;i+=i&-i)tr[i]+=v;
}
int ask(int i){
int sum=;
for(;i;i-=i&-i)sum+=tr[i];
return sum;
}
void add(int xa,int xb,int ya,int yb,int w){
if(xa>xb||ya>yb||ya<||xa<)return;
a[++top]=(sq){,xa,ya,yb,w,};
a[++top]=(sq){,xb+,ya,yb,w,-};
}
void lsh(){
sort(tx+,tx+tp+);
cnt=;
for(int i=;i<=tp;i++)
if(!ls[tx[i]])ls[tx[i]]=++cnt,dy[cnt]=tx[i];
}
void solve(int l,int r,int ql,int qr){
if(ql>qr)return;
if(l==r){
for(int i=ql;i<=qr;i++){
if(a[i].fl>)ans[a[i].fl]=l;
}
return;
}
int mid=l+r>>;
for(int i=ql;i<=qr;i++){
if(a[i].fl>){
q[i]=ask(a[i].a);
}
else {
if(a[i].v<=mid){
add(a[i].a,a[i].val);add(a[i].b+,-a[i].val);
}
}
}
for(int i=ql;i<=qr;i++){
if(a[i].fl==){
if(a[i].v<=mid){
add(a[i].a,-a[i].val);add(a[i].b+,a[i].val);
}
}
}
int t=ql-;
for(int i=ql;i<=qr;i++){
if(a[i].fl>){
if(q[i]>=a[i].v)b[++t]=a[i];
}
else {
if(a[i].v<=mid)b[++t]=a[i];
}
}
int ff=t;
for(int i=ql;i<=qr;i++){
if(a[i].fl>){
if(q[i]<a[i].v){
a[i].v-=q[i];
b[++t]=a[i];
}
}
else {
if(a[i].v>mid)b[++t]=a[i];
}
}
for(int i=ql;i<=qr;i++)a[i]=b[i];
solve(l,mid,ql,ff);solve(mid+,r,ff+,qr);
}
int main()
{
cin>>n>>P>>Q;
for(int i=,t1,t2;i<n;i++){
scanf("%d%d",&t1,&t2);
lj(t1,t2);lj(t2,t1);
}
dfs(,);
for(int j=;j<=;j++)
for(int i=;i<=n;i++)f[i][j]=f[f[i][j-]][j-];
for(int i=,u,v,w;i<=P;i++){
scanf("%d%d%d",&u,&v,&w);
tx[++tp]=w;
if(deep[u]<deep[v])swap(u,v);
int lca=Lca(u,v);
if(lca==v){
int dep=deep[u]-deep[v]-;
int t=u;
for(int x=;x>=;x--){
if((<<x)<=dep){
t=f[t][x];dep-=(<<x);
}
}
add(dft[u],dfn[u],,dft[t]-,w);
add(,dft[t]-,dft[u],dfn[u],w); add(dft[u],dfn[u],dfn[t]+,n,w);
add(dfn[t]+,dft[u],dfn[u],n,w);
}
else {
add(dft[u],dfn[u],dft[v],dfn[v],w);
add(dft[v],dfn[v],dft[u],dfn[u],w);
}
}
lsh();
for(int i=,t1,t2,t3;i<=Q;i++){
scanf("%d%d%d",&t1,&t2,&t3);
a[++top].fl=i;
a[top].pl=dft[t2];a[top].a=dft[t1];a[top].v=t3;
}
sort(a+,a+top+,cmp);
for(int i=;i<=top;i++){
if(!a[i].fl)a[i].v=ls[a[i].v];
}
solve(,cnt,,top);
for(int i=;i<=Q;i++){
printf("%d\n",dy[ans[i]]);
}
return ;
}
接水果(fruit)的更多相关文章
- 接水果(fruit)——整体二分+扫描线
题目 [题目描述] 风见幽香非常喜欢玩一个叫做 osu! 的游戏,其中她最喜欢玩的模式就是接水果.由于她已经 DT FC 了 The big black,她觉得这个游戏太简单了,于是发明了一个更加难的 ...
- JavaEE基础(二十七)/反射、JDK新特性
1.反射(类的加载概述和加载时机) A:类的加载概述 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载 就是指将class文件读入 ...
- 并发队列之:BlockingQueue和ConcurrentLinkedQueue
一.并行和并发区别: 并行:是指两者同时执行一件事.比如赛跑,两个人都在不停的往前跑: 并发:是指资源有限的情况下,两者交替轮流使用资源.比如一段路(单核CPU资源)同时只能过一个人,A走一段后,让给 ...
- python 语句:条件、循环、break、continue...
1. 条件语句 执行条件:判断条件"成立时(非零),则执行后面的语句,而执行内容可以多行,以缩进来区分表示同一范围. [Python程序语言指定任何非0和非空(null)值为true,0 或 ...
- Python基本语法--语句
# -*- coding: utf-8 -*- #条件语句 ''' if 判断条件: 执行语句…… else: 执行语句…… ''' flag = False name = 'python' if n ...
- JavaScript对象创建的几种方式
1 工厂模式 1.1 创建 function createFruit(name,colors) { var o = new Object(); o.name = name; o.colors = co ...
- 【Java入门提高篇】Day15 Java泛型再探——泛型通配符及上下边界
上篇文章中介绍了泛型是什么,为什么要使用泛型以及如何使用泛型,相信大家对泛型有了一个基本的了解,本篇将继续讲解泛型的使用,让你对泛型有一个更好的掌握和更深入的认识. 上篇中介绍完泛型之后,是不是觉得泛 ...
- 循环结构for
教程:高能:语句结构都是由关键字开头,用冒号结束! 一:语句结构 for <variable> in <sequence>: <statements>else ...
- [安卓]ListView 与 RecyclerView的比较
ListView与RecyclerView在在app应用非常广泛,相对于其他的view(button textview)来说比较复杂,接下来我将讲一下创建的流程以及两者的不同. 代码来自<第一行 ...
随机推荐
- 初探12C碰到的那些“坑”
一个昏天黑地的早上,刚搭建的系统忽然遭遇严重数据库问题.于是,主要人物闪亮登场了,他们分别是友商人员小灰和DBA小Y. 事情的开始,小Y接到小灰紧急救助电话... 小灰:小Y,我是友商的小灰,刚搭建的 ...
- django+xadmin在线教育平台(十四)
7-1 django templates模板继承1 机构可以筛选类别 机构可以根据所在地区进行分类 右侧我要学习功能: form表单提交 右下:授课机构排名 页面头部与底部为全局头和全局底部. Dja ...
- Mac中Mysql开启远程访问(不同于linux直接改配置文件)
在mac中安装Mysql Workbench 用root用户连上安装的Mysql. 开启远程访问的服务 如下图可以看到是root用户绑定的是localhost 如果不做修改的话,直接访问是访问不了 ...
- 精读《setState 做了什么》
1 引言 setState 是 React 框架最常用的命令,它是用来更新状态的,这也是 React 框架划时代的功能. 但是 setState 函数是 react 包导出的,他们又是如何与 reac ...
- PHP设计者---composer
Composer 是 PHP5以上 的一个依赖管理工具.它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们.Composer 不是一个包管理器.是的,它涉及 "packages&q ...
- [BZOJ2427][HAOI2010]软件安装(tarjan+树形DP)
如果依赖关系出现环,那么对于一个环里的点,要么都选要么都不选, 所以每个环可以当成一个点,也就是强连通分量 然后就可以构造出一颗树,然后树形背包瞎搞一下就行了 注意要搞一个虚拟节点当根节点 Code ...
- Leetcode 653. 两数之和 IV - 输入 BST
题目链接 https://leetcode.com/problems/two-sum-iv-input-is-a-bst/description/ 题目描述 给定一个二叉搜索树和一个目标结果,如果 B ...
- Flask错误收集 【转】
感谢大佬 ---> 原文链接 一.pydev debugger: process XXXXX is connecting 这个错误网上找了很多资料都无法解决,尝试过多种方法后,对我来说,下面这个 ...
- 动态调试smali代码
Android Killer对应用进行反编译为smali代码,看看Manifest文件中application标签里面是否有android:debuggable="true",没有 ...
- 基于CSS多列实现瀑布流
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...