BZOJ3772精神污染&BZOJ3488&luogu3242接水果
LINK1:精神污染
LINK2:[ONTAK2010Highways](http://www.lydsy.com/JudgeOnline/problem.php?id=3488)
LINK3:[接水果](https://www.luogu.com.cn/problem/P3242)
三道题挺相似的 也挺重要的 所以写一发题解。
精神污染:随机选择两条路径求一条路径被另一条路径包含的概率。
不难发现是污染的路径对数/总路径对数。总路径对数也很显然.
最难得地方是 求出左边的东西。考虑枚举一条路径 求出有多少条路径被其覆盖了。
树上路径覆盖问题 我们需要一个根号的算法或者log的算法。
先考虑链的情况 对于当前暴力枚举的路径不妨设为x,y 对于其他路径的两个端点设为ai bi
当前路径覆盖其他路径当且仅当 ai bi都在x-y的路径上 我们可以通过求LCA来表示这个东西不过过于繁琐我们还有更快的dfs序.
考虑lx下面分析接水果和刚才未完成的分类讨论。
接水果和刚才不同的是要求包含的第k大的值。
考虑二分 然后我们一条一条的加进去再查询。
多组询问 那就整体二分。
考虑如何快速判定一个路径到底包含了多少条路径。
可以发现这是一个上述问题的子问题。配合我们上述做法 也不过nlog^2的复杂度。
不过常数巨大 考虑优化一下这个做法 我们维护可持久化主席树 这个极其消耗时间 单次可以承受 但logn次就难以承受了。
一对点被另外一对点所包含 设当前这对点dfs序为posx lastx posy lasty
如果x,y(d[x]>d[y])没有祖先关系我们发现另外一对点的dfs序分别出现在上述两个区间之中即可。
如果存在祖先关系那么显然 y=lca(x,y) 另外一对点的其中一个点在posx lastx中 设z为y到x路径上的第一个儿子 那么令一个点的范围[1,posz-1][lastz,n]
这两个区间之中 可以发现我们把这种点对关系转换成区间关系 这其实是一个二维数点问题 我们可以扫描线+bit/线段树解决。
至于第二道题目显然也是这种类型的 特此这钟类型的题目有两种做法 其中第二种常用且常数较小。
可以发现我们这样做是一个二维数点问题 K-D tree也是可以查询的 不过每次复杂度是$sqrt(n)$。。当然也是可以过的啦。
但是接水果这道题整体二分比较显然 还是练练整体二分吧。
多此一举了一个地方导致查半天的错误。。还是思想不够缜密。这里放出代码 比较难写qwq.
```
//#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define db double
#define INF 1000000000
#define ld long double
#define pb push_back
#define put(x) printf("%d\n",x)
#define min(x,y) ((x)>(y)?(y):(x))
#define max(x,y) ((x)>(y)?(x):(y))
#define rep(p,n,i) for(ll i=p;i
#define F first
#define S second
#define mk make_pair
#define EPS 1e-7
#define P 13331ll
#define mod 998244353
using namespace std;
char buf[1'9'){if(ch=='-')f=-1;ch=getc();}
while(ch>='0'&&chsz[son[x]])son[x]=tn;
}
las[x]=cnt;
}
inline void dp(int x,int father)
{
top[x]=father;
if(!son[x])return;
dp(son[x],father);
for(int i=lin[x];i;i=nex[i])
if(ver[i]!=fa[x]&&ver[i]!=son[x])dp(ver[i],ver[i]);
}
inline int get(int x,int y)
{
while(top[x]!=top[y])
{
if(fa[top[x]]==y)return top[x];
x=fa[top[x]];
}
return son[y];
}
inline void add1(int x,int y)
{
while(xQr)return;
if(L==R)
{
for(int i=Ql;i>1;
int flag=l;
for(int i=Ql;i=s[i].k)sl[++ql]=s[i];
else s[i].k-=w[s[i].id],sr[++qr]=s[i];
}
for(int i=Ql;i=dfn[x])
{
int zz=get(x,y);
t[++ss]=(wy){1,dfn[x],las[x]+1,z,1};
t[++ss]=(wy){dfn[zz],dfn[x],las[x]+1,z,-1};
t[++ss]=(wy){las[zz]+1,dfn[x],las[x]+1,z,1};
}
else
{
t[++ss]=(wy){dfn[y],dfn[x],las[x]+1,z,1};
t[++ss]=(wy){las[y]+1,dfn[x],las[x]+1,z,-1};
}
}
for(int i=1;isz[son[x]])son[x]=tn;
}
las[x]=cnt;
}
inline void dp(int x,int father)
{
top[x]=father;
if(!son[x])return;
dp(son[x],father);
for(int i=lin[x];i;i=nex[i])
if(ver[i]!=fa[x]&&ver[i]!=son[x])dp(ver[i],ver[i]);
}
inline int get(int x,int y)
{
while(top[x]!=top[y])
{
if(fa[top[x]]==y)return top[x];
x=fa[top[x]];
}
return son[y];
}
inline void add1(int x,int y)
{
while(x=dfn[x])
{
int z=get(x,y);
q[++s]=(wy){1,las[x],n};
q[++s]=(wy){-1,las[x],las[z]};
q[++s]=(wy){1,las[x],dfn[z]-1};
q[++s]=(wy){-1,dfn[x]-1,n};
q[++s]=(wy){1,dfn[x]-1,las[z]};
q[++s]=(wy){-1,dfn[x]-1,dfn[z]-1};
}
else
{
q[++s]=(wy){1,las[x],las[y]};
q[++s]=(wy){-1,dfn[x]-1,las[y]};
q[++s]=(wy){-1,las[x],dfn[y]-1};
q[++s]=(wy){1,dfn[x]-1,dfn[y]-1};
}
}
sort(t+1,t+1+2*m);sort(q+1,q+1+s);
int flag=1;
for(int i=1;isz[son[x]])son[x]=tn;
}
las[x]=cnt;
}
inline void dp(int x,int father)
{
top[x]=father;
if(!son[x])return;
dp(son[x],father);
for(int i=lin[x];i;i=nex[i])
if(ver[i]!=fa[x]&&ver[i]!=son[x])dp(ver[i],ver[i]);
}
inline int get(int x,int y)
{
while(top[x]!=top[y])
{
if(fa[top[x]]==y)return top[x];
x=fa[top[x]];
}
return son[y];
}
inline void add1(int x,int y)
{
while(x=dfn[x])
{
int z=get(x,y);
q[++s]=(wy){1,las[x],n,i};
q[++s]=(wy){-1,las[x],las[z],i};
q[++s]=(wy){1,las[x],dfn[z]-1,i};
q[++s]=(wy){-1,dfn[x]-1,n,i};
q[++s]=(wy){1,dfn[x]-1,las[z],i};
q[++s]=(wy){-1,dfn[x]-1,dfn[z]-1,i};
}
else
{
q[++s]=(wy){1,las[x],las[y],i};
q[++s]=(wy){-1,dfn[x]-1,las[y],i};
q[++s]=(wy){-1,las[x],dfn[y]-1,i};
q[++s]=(wy){1,dfn[x]-1,dfn[y]-1,i};
}
}
sort(t+1,t+1+2*m);sort(q+1,q+1+s);
int flag=1;
for(int i=1;i
BZOJ3772精神污染&BZOJ3488&luogu3242接水果的更多相关文章
- BZOJ3772: 精神污染
Description 兵库县位于日本列岛的中央位置,北临日本海,南面濑户内海直通太平洋,中央部位是森林和山地,与拥有关西机场的大阪府比邻而居,是关西地区面积最大的县,是集经济和文化于一体的一大地区, ...
- BZOJ3772精神污染——可持久化线段树+出栈入栈序
题目描述 兵库县位于日本列岛的中央位置,北临日本海,南面濑户内海直通太平洋,中央部位是森林和山地,与拥有关西机场的大阪府比邻而居,是关西地区面积最大的县,是集经济和文化于一体的一大地区,是日本西部门户 ...
- [BZOJ3772]精神污染 主席树上树+欧拉序
3772: 精神污染 Time Limit: 10 Sec Memory Limit: 64 MB Description 兵库县位于日本列岛的中央位置,北临日本海,南面濑户内海直通太平洋,中央部位 ...
- BZOJ3772 精神污染 【主席树 + dfs序】
题目 兵库县位于日本列岛的中央位置,北临日本海,南面濑户内海直通太平洋,中央部位是森林和山地,与拥有关西机场的大阪府比邻而居,是关西地区面积最大的县,是集经济和文化于一体的一大地区,是日本西部门户,海 ...
- BZOJ3772 精神污染 主席树 dfs序
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3772 题意概括 给出一个树,共n个节点. 有m条互不相同的树上路径. 现在让你随机选择2条路径,问 ...
- BZOJ3772精神污染
参见http://blog.csdn.net/popoqqq/article/details/43122821 #include<bits/stdc++.h> using namespac ...
- bzoj3772 精神污染 dfs 序+主席树
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3772 题解 很简单的一道题目. 上午研究一个题目的时候发现了这个题目是一个弱化版,所以来写了一 ...
- 【BZOJ3772】精神污染 DFS序+主席树
[BZOJ3772]精神污染 Description 兵库县位于日本列岛的中央位置,北临日本海,南面濑户内海直通太平洋,中央部位是森林和山地,与拥有关西机场的大阪府比邻而居,是关西地区面积最大的县,是 ...
- 【bzoj3772】精神污染
Description 兵库县位于日本列岛的中央位置,北临日本海,南面濑户内海直通太平洋,中央部位是森林和山地,与拥有关西机场的大阪府比邻而居,是关西地区面积最大的县,是集经济和文化于一体的一大地区, ...
随机推荐
- 精简CSS代码,提高代码的可读性和加载速度
前言 提高网站整体加载速度的一个重要手段就是提高代码文件的网络传输速度.之前提到过,所有的代码文件都应该是经过压缩了的,这可提高网络传输速度,提高性能.除了压缩代码之外,精简代码也是一种减小代码文件大 ...
- iOS应用千万级架构:MVVM框架
业务模块内的MVC和MVVM架构 目前,唯品会中MVC和MVVM架构并存,后期会偏重于MVVM架构的使用. MVC架构 Model:程序中要操纵的实际对象的抽象,为Controller提供经过抽象的业 ...
- 装机预备技能,Linux系统简介,安装Linux系统,Linux基本操作-云计算学习(2)
装机预备技能 问题 要求安装一台可用的KVM服务器: RHEL与CentOS系统有什么关联? Linux系统中第三块SCSI硬盘如何表示? 步骤 实现此案例需要按照如下步骤进行. 步骤一:RHEL系统 ...
- 深入学习JavaScript数据类型
数据类型是我们学习JavaScript时最先接触的东西,它是JavaScript中最基础的知识,这些知识看似简单,但实则有着许多初学者甚至是部分学习了多年JavaScript的老手所不了解的知识. 数 ...
- [系列] Go - json.Unmarshal 遇到的小坑
1.问题现象描述 使用 json.Unmarshal(),反序列化时,出现了科学计数法,参考代码如下: jsonStr := `{"number":1234567}` result ...
- python PEP8开发规范
为了使得代码更美观,方便阅读,建议遵循下PEP8规范 每行长度最大不要超过79. 换行可以使用反斜杠,换行点要在操作符的后面敲回车. 类个top-level函数定义之间空两行:类中的方法定义之间空一行 ...
- 使用IDEA创建Spring boot项目,继承mybaits。并进行简单的数据库查询操作
本文讲的是使用IEDA创建Spring boot项目,对于环境安装需要自行准备,如JDK1.8.Maven 3.3.IDEA编译器.Mysql5.7等需事前准备好. 1.创建Spring boot项目 ...
- Flask 基础组件(五):请求和响应
from flask import Flask from flask import request from flask import render_template from flask impor ...
- Unity - NavMeshAgent-GetStart
Select scene geometry that should affect the navigation – walkable surfaces and obstacles. Check Nav ...
- Firefox 底部多出了一个白条
如图所示 下方多了个白条 html{ font-size:0px; }