分析

我用的主席树维护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 狼人的更多相关文章

  1. [LOJ2865] P4899 [IOI2018] werewolf 狼人

    P4899 [IOI2018] werewolf 狼人 LOJ#2865.「IOI2018」狼人,第一次AC交互题 kruskal 重构树+主席树 其实知道重构树的算法的话,难度就主要在主席树上 习惯 ...

  2. [IOI2018] werewolf 狼人

    [IOI2018] werewolf 狼人 IOI2018题解 (其实原题强制在线,要用主席树) 代码: 注意: 1.下标从0~n-1 2.kruskal重构树开始有n个节点,tot从n开始,++to ...

  3. [IOI2018] werewolf 狼人 kruskal重构树,主席树

    [IOI2018] werewolf 狼人 LG传送门 kruskal重构树好题. 日常安利博客文章 这题需要搞两棵重构树出来,这两棵重构树和我们平时见过的重构树有点不同(据说叫做点权重构树?),根据 ...

  4. P4899 【[IOI2018] werewolf 狼人】

    感觉已经几次碰到这种类型的题目了,写篇\(Blog\)总结一下 题意: 是否存在一条\((s_i, t_i)\)的路径,满足先只走编号不超过\(L_i\)的点,再走编号不超过\(R_i\)的点 \(S ...

  5. 题解 洛谷 P4899 【[IOI2018] werewolf 狼人】

    先考虑狼形,其只能走编号小于\(R\)的点.若将每条边赋边权为其两端点编号的较大值,然后按最小生成树的顺序构建\(Kruskal\)重构树. 那么从原图的一个点\(x\)在树上倍增,到达满足要求且深度 ...

  6. [Luogu4899][IOI2018] werewolf 狼人

    luogu sol \(\mbox{IOI2018}\)的出题人有没有看过\(\mbox{NOI2018}\)的题目呀... \(\mbox{Kruskal}\)重构树+二维数点. 题目相当于是问你从 ...

  7. luogu P4899 [IOI2018] werewolf 狼火

    传送门 首先很显然,从人形起点出发能到的点和狼形能到终点的点都是一个联通块,如果能从起点到终点则说明这两个联通块有交 这个时候可以请出我们的克鲁斯卡尔重构树,即对原图分别建两棵重构树,一棵边权为两端点 ...

  8. [IOI2018] werewolf 狼人 [kruskal重构树+主席树]

    题意: 当你是人形的时候你只能走 \([L,N-1]\) 的编号的点(即大于等于L的点) 当你是狼形的时候你只能走 \([1,R]\) 的编号的点(即小于等于R的点) 然后问题转化成人形和狼形能到的点 ...

  9. @loj - 2865@ 「IOI2018」狼人

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 在日本的茨城县内共有 N 个城市和 M 条道路.这些城市是根据人 ...

随机推荐

  1. Tomcat控制台

    一般在安装完成Tomcat之后,我们需要验证tomcat是否安装成功,在浏览器的url中输入:http://127.0.0.1:8080/,就会进入如下的页面(表示安装成功): 在上面的左侧顶部,有一 ...

  2. dp(动态规划之最佳路径+dfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=1078 FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Ot ...

  3. 垂直口风琴菜单3(jquery)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 看漫画就能学SQL,简直太cool了

    对于SQl, 很多人学不会的原因是从一开始就没明白,学这东西能干啥,学会了能有什么用.甚至有些人不知道'SQL'应该怎么读,以至于一开始兴致勃勃,但是学到一半放弃了. 注意:'sql'真的不能读成'烧 ...

  5. OtterTune配置记录

    0. 准备两台Ubuntu 18.04的虚拟机,安装mysql(供server-side存储调优数据用)和postgresql(供client-side存储业务数据用,这里以PostgreSQL为例. ...

  6. Form表单组件验证

    第一版:最基本版本 views源码 #——————————————————————form验证—————————————— from django import forms from django.f ...

  7. Ubuntu14 vsftp 的安装和虚拟用户配置

    一.介绍 FTP 是 File Transfer Protocol (文件传输协议)的缩写 ,在 Unix/Linux 系统中常用的免费 FTP 服务器软件主要是 VSFTP,vsftp的官方地址:h ...

  8. Echarts数据可视化grid直角坐标系(xAxis、yAxis)详解:

    mytextStyle={ color:"#333", //文字颜色 fontStyle:"normal", //italic斜体 oblique倾斜 font ...

  9. canvas画随机的四位验证码

    效果图如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  10. go中string类型转换为基本数据类型的方法

    代码 // string类型转基本数据类型 package main import ( "fmt" "strconv" ) func main() { str1 ...