Luogu

我今天做两道整体二分结果全都是BZOJ权限题???

sol

我们抓住“盘子的路径是水果的路径的子路径”这个条件。

考虑每一个盘子路径\((u,v)\),讨论它可以作为哪些水果路径的子路径。

如果说\(u,v\)不是祖孙关系,那么水果路径的两端点就必须分别在以\(u\)和\(v\)为根的子树中。即若一个水果路径\((a,b)\)满足\((u,v)\)是它的子路径,则有\(dfn_u\le{dfn_a}\le{low_u},dfn_v\le{dfn_b}\le{low_v}\)(请自行判断是否交换\(u,v\)、\(a,b\)的顺序)

其中\(low_u\)是以\(u\)为根的子树中的最大\(dfn\)序。

如果\(u,v\)是祖孙关系,假设\(u\)是祖先,那么据路径的一端一定要在\(v\)的子树里,另一端的位置,要保证不在\(w\)的子树里,其中\(w\)是\(u\)的直接儿子也是\(v\)的祖先(当然只有那一个啦)。

所以就是要满足\(1\le{dfn_a}<dfn_w\mbox{或}low_u<dfn_a\le{n},dfn_v\le{dfn_b}\le{low_v}\)

发现这个类似一个二维的矩形呀,所以就可以做一个扫描线,树状数组统计答案就可以了。

把所有盘子视为一个或是两个矩形,按权值大小排序,每次二分一个位置判断某一点(一个水果)是否已经被\(k\)个矩形覆盖,然后向下递归即可。

依旧是整体二分的板子

code

#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 40005;
int gi()
{
int x=0,w=1;char ch=getchar();
while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if (ch=='-') w=0,ch=getchar();
while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return w?x:-x;
}
struct edge{int to,next;}a[N<<1];
struct plate{
int x1,x2,y1,y2,v;
bool operator < (const plate &b) const
{return v<b.v;}
}p[N<<1];
struct fruit{
int x,y,k,id;
bool operator < (const fruit &b) const
{return x<b.x;}
}q[N],q1[N],q2[N];
struct node{
int x,y,v;
bool operator < (const node &b) const
{return x<b.x;}
}zsy[N<<2];
int n,P,Q,head[N],cnt,fa[N],dep[N],sz[N],son[N],top[N],dfn[N],low[N],tot,c[N],ans[N];
void dfs1(int u,int f)
{
fa[u]=f;dep[u]=dep[f]+1;sz[u]=1;
for (int e=head[u];e;e=a[e].next)
{
int v=a[e].to;if (v==f) continue;
dfs1(v,u);
sz[u]+=sz[v];if (sz[v]>sz[son[u]]) son[u]=v;
}
}
void dfs2(int u,int up)
{
top[u]=up;dfn[u]=++cnt;
if (son[u]) dfs2(son[u],up);
for (int e=head[u];e;e=a[e].next)
if (a[e].to!=fa[u]&&a[e].to!=son[u])
dfs2(a[e].to,a[e].to);
low[u]=cnt;
}
int getlca(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 getson(int u,int v)
{
int gg;
while (top[u]^top[v]) gg=top[v],v=fa[top[v]];
return u==v?gg:son[u];
}
void modify(int k,int v){while (k<=n) c[k]+=v,k+=k&-k;}
int query(int k){int s=0;while (k) s+=c[k],k-=k&-k;return s;}
void solve(int L,int R,int l,int r)//LR询问(水果)区间 lr二分答案区间
{
if (L>R) return;
if (l==r)
{
for (int i=L;i<=R;i++)
ans[q[i].id]=p[l].v;
return;
}
int mid=l+r>>1,top=0,pos=0,t1=0,t2=0,temp;
for (int i=l;i<=mid;i++)
{
zsy[++top]=(node){p[i].x1,p[i].y1,1};
zsy[++top]=(node){p[i].x1,p[i].y2+1,-1};
zsy[++top]=(node){p[i].x2+1,p[i].y1,-1};
zsy[++top]=(node){p[i].x2+1,p[i].y2+1,1};
}
sort(zsy+1,zsy+top+1);
for (int i=L;i<=R;i++)
{
while (pos<top&&zsy[pos+1].x<=q[i].x)
pos++,modify(zsy[pos].y,zsy[pos].v);
temp=query(q[i].y);
if (q[i].k<=temp) q1[++t1]=q[i];
else q[i].k-=temp,q2[++t2]=q[i];
}
while (pos<top) pos++,modify(zsy[pos].y,zsy[pos].v);//记得这里要清空树状数组
for (int i=L,j=1;j<=t1;i++,j++) q[i]=q1[j];
for (int i=L+t1,j=1;j<=t2;i++,j++) q[i]=q2[j];
solve(L,L+t1-1,l,mid);solve(L+t1,R,mid+1,r);
}
int main()
{
n=gi();P=gi();Q=gi();
for (int i=1,u,v;i<n;i++)
{
u=gi();v=gi();
a[++cnt]=(edge){v,head[u]};head[u]=cnt;
a[++cnt]=(edge){u,head[v]};head[v]=cnt;
}
dfs1(1,0);cnt=0;dfs2(1,1);
for (int i=1,u,v,w,gg;i<=P;i++)
{
u=gi();v=gi();w=gi();
if (dfn[u]>dfn[v]) swap(u,v);
if (getlca(u,v)==u)
{
gg=getson(u,v);
if (dfn[gg]>1) p[++tot]=(plate){1,dfn[gg]-1,dfn[v],low[v],w};
if (low[gg]<n) p[++tot]=(plate){dfn[v],low[v],low[gg]+1,n,w};
}
else p[++tot]=(plate){dfn[u],low[u],dfn[v],low[v],w};
}
sort(p+1,p+tot+1);
for (int i=1,u,v,k;i<=Q;i++)
{
u=gi();v=gi();k=gi();
if (dfn[u]>dfn[v]) swap(u,v);
q[i]=(fruit){dfn[u],dfn[v],k,i};
}
sort(q+1,q+Q+1);
solve(1,Q,1,tot);
for (int i=1;i<=Q;i++) printf("%d\n",ans[i]);
return 0;
}

[Luogu3242][HNOI2015]接水果的更多相关文章

  1. BZOJ4009: [HNOI2015]接水果

    4009: [HNOI2015]接水果 Description 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果. 由于她已经DT FC 了The big black,  她 ...

  2. BZOJ 4009: [HNOI2015]接水果

    4009: [HNOI2015]接水果 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 636  Solved: 300[Submit][Status] ...

  3. [BZOJ4009][HNOI2015]接水果(整体二分)

    [HNOI2015]接水果 时间限制:60s      空间限制:512MB 题目描述 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果. 由于她已经DT FC 了The b ...

  4. 洛谷 P3242 [HNOI2015]接水果 解题报告

    P3242 [HNOI2015]接水果 题目描述 风见幽香非常喜欢玩一个叫做 \(osu!\) 的游戏,其中她最喜欢玩的模式就是接水果.由于她已经\(DT\) \(FC\) 了\(\tt{The\ b ...

  5. [洛谷P3242] [HNOI2015]接水果

    洛谷题目链接:[HNOI2015]接水果 题目描述 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果.由于她已经DT FC 了The big black, 她觉得这个游戏太简 ...

  6. 【BZOJ4009】[HNOI2015]接水果 DFS序+整体二分+扫描线+树状数组

    [BZOJ4009][HNOI2015]接水果 Description 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果.由于她已经DT FC 了The big black, ...

  7. [HNOI2015]接水果[整体二分]

    [HNOI2015]接水果 给出一个树上路径集合\(S\) 多次询问\(x,y\)中的\(k\)小值 如果你问我数列上那么我会 树上的话 树上差分了吧直接?- 令 \(st_x<st_y\) 1 ...

  8. Luogu3242:[HNOI2015]接水果

    题面 Luogu3242 Sol 考虑每个盘子怎样才能接到一个水果 分两种情况: 盘子的\(x, y\)在一条链上,那么水果的两点就要在这条链之外 不在的话,水果的两点就分别在盘子的两点的子树中 记录 ...

  9. [HNOI2015]接水果

    题目描述 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果.由于她已经DT FC 了The big black, 她觉得这个游戏太简单了,于是发明了一个更加难的版本. 首先有 ...

随机推荐

  1. PHPUnit 手册

    PHPUnit 手册 Sebastian Bergmann 版权 © 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 ...

  2. 使用matlab生成sine波mif文件

    使用matlab生成sine波mif文件 作者:lee神 在使用altera 的FPGA中的rom过程中常常会使用到.mif文件或.hex文件.对于初学者,无论mif还是hex都是很令人疑惑的东西,这 ...

  3. Head First C 笔记

    嗨翻c语言 1. 入门 为什么字符从零开始编号? 字符的索引数值表示的是一个偏移量,它表示的是当前所引用的字符与第一个字符之间差多少个字符. 单双引号的区别? 单引号 一个字符,双- 字符串 字符串字 ...

  4. js中的回调函数

    1.你定义的 2.你没有调用 3.但是最终他执行了 例子: 定时器回调函数 setTimeout(function(){ },100); dom元素的回调函数 document.getElementB ...

  5. 剑指offer 第一个只出现一次的字符 hash

    思路:i表示字符的ASCII码值,cntp[i]表示字符出现的次数. AC代码 class Solution { public: int FirstNotRepeatingChar(string st ...

  6. MySQL InnoDB表压缩

    MySQL InnoDB表压缩 文件大小减小(可达50%以上) ==> 查询速度变快(count * 约减少20%以上时间) 如何设置mysql innodb 表的压缩: 第一,mysql的版本 ...

  7. 浏览器兼容的JS写法总结

    一.元素查找问题 1. document.all[name]   (1)现有问题:Firefox不支持document.all[name]   (2)解决方法:使用getElementsByName( ...

  8. 我的Java设计模式-观察者模式

    相信大家都有看过<喜洋洋与灰太狼>,说的是灰太狼和羊族的"斗争",而每次的结果都是灰太狼一飞冲天,伴随着一句"我还会回来的......".为灰太狼感 ...

  9. chrome浏览器Timing内各字段解析

    Queueing请求文件顺序的的排序   Stalled是浏览器得到要发出这个请求的指令到请求可以发出的等待时间,一般是代理协商.以及等待可复用的TCP连接释放的时间,不包括DNS查询.建立TCP连接 ...

  10. <CEPH中国-深圳站-技术交流会演讲PPT> YY云平台Ceph Block应用实践 & 我写的书 《CEPH实战》

    YY云平台Ceph Block应用实践 http://s3.yyclouds.com/public/YY%E4%BA%91%E5%B9%B3%E5%8F%B0Ceph%E5%AE%9E%E8%B7%B ...