p4899 [IOI2018] werewolf 狼人
分析
我用的主席树维护qwq
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
struct node {
int le,ri,sum;
};
node d[*];
int n,m,q,val[],rt[],cnt;
vector<int>v[];
struct Tree {
int kk,dfn[],fin[],fa[],pa[][],T;
vector<int>vv[];
inline int sf(int x){return fa[x]==x?x:fa[x]=sf(fa[x]);}
inline void dfs(int x){
dfn[x]=++T;
for(int i=;i<;i++)pa[x][i]=pa[pa[x][i-]][i-];
for(int i=;i<vv[x].size();i++)dfs(vv[x][i]);
fin[x]=T;
}
inline void work(){
int i,j,k;
for(i=;i<=n;i++)fa[i]=i;
if(kk){
for(i=n;i;i--)
for(j=;j<v[i].size();j++)
if(i<v[i][j]){
k=sf(v[i][j]);
if(k==i)continue;
vv[i].push_back(k);
fa[k]=pa[k][]=i;
}
dfs();
}else {
for(i=;i<=n;i++)
for(j=;j<v[i].size();j++)
if(i>v[i][j]){
k=sf(v[i][j]);
if(k==i)continue;
vv[i].push_back(k);
fa[k]=pa[k][]=i;
}
dfs(n);
}
}
inline int go(int x,int len){
int i,j,k;
for(i=;i>=;i--)
if(pa[x][i]&&((kk&&pa[x][i]>=len)||(!kk&&pa[x][i]<=len)))
x=pa[x][i];
return x;
}
};
Tree A,B;
inline void update(int &x,int y,int le,int ri,int k){
d[++cnt]=d[y];
d[cnt].sum++;
x=cnt;
if(le==ri)return;
int mid=(le+ri)>>;
if(mid>=k)update(d[x].le,d[y].le,le,mid,k);
else update(d[x].ri,d[y].ri,mid+,ri,k);
}
inline int que(int a,int b,int le,int ri,int x,int y){
if(le>=x&&ri<=y)return d[a].sum-d[b].sum;
int mid=(le+ri)>>,Ans=;
if(mid>=x)Ans+=que(d[a].le,d[b].le,le,mid,x,y);
if(mid<y)Ans+=que(d[a].ri,d[b].ri,mid+,ri,x,y);
return Ans;
}
int main(){
int i,j,k,x,y;
scanf("%d%d%d",&n,&m,&q);
for(i=;i<=m;i++){
scanf("%d%d",&x,&y);
x++,y++;
v[x].push_back(y);
v[y].push_back(x);
}
A.kk=;A.work();B.work();
for(i=;i<=n;i++)val[A.dfn[i]]=B.dfn[i];
for(i=;i<=n;i++)update(rt[i],rt[i-],,n,val[i]);
for(i=;i<=q;i++){
int s,t,le,ri;
scanf("%d%d%d%d",&s,&t,&le,&ri);
s++,t++,le++,ri++;
s=A.go(s,le),t=B.go(t,ri);
if(que(rt[A.fin[s]],rt[A.dfn[s]-],,n,B.dfn[t],B.fin[t]))puts("");
else puts("");
}
return ;
}
p4899 [IOI2018] werewolf 狼人的更多相关文章
- [LOJ2865] P4899 [IOI2018] werewolf 狼人
P4899 [IOI2018] werewolf 狼人 LOJ#2865.「IOI2018」狼人,第一次AC交互题 kruskal 重构树+主席树 其实知道重构树的算法的话,难度就主要在主席树上 习惯 ...
- [IOI2018] werewolf 狼人
[IOI2018] werewolf 狼人 IOI2018题解 (其实原题强制在线,要用主席树) 代码: 注意: 1.下标从0~n-1 2.kruskal重构树开始有n个节点,tot从n开始,++to ...
- [IOI2018] werewolf 狼人 kruskal重构树,主席树
[IOI2018] werewolf 狼人 LG传送门 kruskal重构树好题. 日常安利博客文章 这题需要搞两棵重构树出来,这两棵重构树和我们平时见过的重构树有点不同(据说叫做点权重构树?),根据 ...
- P4899 【[IOI2018] werewolf 狼人】
感觉已经几次碰到这种类型的题目了,写篇\(Blog\)总结一下 题意: 是否存在一条\((s_i, t_i)\)的路径,满足先只走编号不超过\(L_i\)的点,再走编号不超过\(R_i\)的点 \(S ...
- 题解 洛谷 P4899 【[IOI2018] werewolf 狼人】
先考虑狼形,其只能走编号小于\(R\)的点.若将每条边赋边权为其两端点编号的较大值,然后按最小生成树的顺序构建\(Kruskal\)重构树. 那么从原图的一个点\(x\)在树上倍增,到达满足要求且深度 ...
- [Luogu4899][IOI2018] werewolf 狼人
luogu sol \(\mbox{IOI2018}\)的出题人有没有看过\(\mbox{NOI2018}\)的题目呀... \(\mbox{Kruskal}\)重构树+二维数点. 题目相当于是问你从 ...
- luogu P4899 [IOI2018] werewolf 狼火
传送门 首先很显然,从人形起点出发能到的点和狼形能到终点的点都是一个联通块,如果能从起点到终点则说明这两个联通块有交 这个时候可以请出我们的克鲁斯卡尔重构树,即对原图分别建两棵重构树,一棵边权为两端点 ...
- [IOI2018] werewolf 狼人 [kruskal重构树+主席树]
题意: 当你是人形的时候你只能走 \([L,N-1]\) 的编号的点(即大于等于L的点) 当你是狼形的时候你只能走 \([1,R]\) 的编号的点(即小于等于R的点) 然后问题转化成人形和狼形能到的点 ...
- @loj - 2865@ 「IOI2018」狼人
目录 @description@ @solution@ @accepted code@ @details@ @description@ 在日本的茨城县内共有 N 个城市和 M 条道路.这些城市是根据人 ...
随机推荐
- 前端表格选中列合计,select-chosen,set集合,display隐藏
业务涉及到table选中列合计,同时隐藏未选中列.为了减少后端请求数据,前端获得所有数据后筛选计算. 1.select下拉框初始化 $(function() { $('.chosen-select') ...
- [Python3] 014 集合的内置方法
目录 1. Python3 中如何查看 set() 的内置方法 2. 少废话,上例子 (1) add() (2) 又见清理大师 clear() (3) 又见拷贝君 copy() (4) 找茬君 dif ...
- SpringBoot(七) -- 嵌入式Servlet容器
一.嵌入式Servlet容器 在传统的开发中,我们在完成开发后需要将项目打成war包,在外部配置好TomCat容器,而这个TomCat就是Servlet容器.在使用SpringBoot开发时,我们无需 ...
- 自定义django中间件
自定义中间件 第一步:在根目录创建路径Middle/m1.py(注意如果是python2的话Middle下要有__init__.py文件,不然会报找不到模块错误) m1.py的内容: # -*- co ...
- Dom选择器使用与调试记录
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- nodejs爬虫编码问题
最近再做一个nodejs网站爬虫的项目,但是爬一些网站的数据出现了中文字符乱码的问题.查了一下,主要是因为不是所有的网站的编码格式都是utf-8,还有一些网站用的是gb2312或者gbk的编码格式.所 ...
- python中的垃圾回收机制及原理
序言: 来一起看看: 不同于C/C++,像Python这样的语言是不需要程序员写代码来管理内存的,它的GC(Garbage Collection)机制 实现了自动内存管理.GC做的事情就是解放程序员的 ...
- webstorm 2019 去掉编辑器右侧白线
第一步:打开设置 第二步: 第三部:apply 关闭设置
- MVC项目集成swagger
1.创建WebAPI项目解决方案 2.使用nuget引入Swashbuckle包 引入Swashbuckle包后App_Start文件夹下会多出一个SwaggerConfig文件 3.添加接口注释 项 ...
- 一、Rabbit使用-安装教程
首先我去官网上面下载RabbitMQ安装包:https://www.rabbitmq.com/which-erlang.html 现在下载的版本是3.7.17 因为我erlong安装的是20.3