题目

我们要求出\(l_i,r_i\)表示\(i\)最远能够到达的最左边和最右边的格子。

首先有一个比较简单的暴力,就是每次我们选择一个格子,然后从当前格子开始往左右暴力扩展,找到能够到达的最远的格子。

然后对于这个暴力,我们有一个小小的优化:就是假如我们从左往右处理,当前的点是\(i\),新扩展到了一个左边的节点\(j\),那么我们可以直接拿\(l_j\)赋给\(l_i\),如此重复。右边同理。

这样的暴力是可以被卡成\(O(n^2)\)的。但是题目数据水所以可以通过。

现在我们通过一些优化来使得这个暴力的复杂度变得正确。

对于一段连续的没有门的格子,我们可以把它缩成一个格子。

然后对于一个门和钥匙\((x,y)\),如果\(y>x\),我们就从\(x\)到\(x+1\)建一条边,意思是无法从\(x\)走到\(x+1\),\(y<x\)同理。

这样我们再拓扑排序,因为点\(u\)的答案区间一定不会包含拓扑序在它后面的点的答案区间,所以按照拓扑序转移就能够保证复杂的正确性了,最后复杂度为\(O(n+m)\)。

#include<bits/stdc++.h>
#define pb push_back
using namespace std;
namespace IO
{
char ibuf[(1<<21)+1],*iS,*iT;
char Get(){return (iS==iT? (iT=(iS=ibuf)+fread(ibuf,1,(1<<21)+1,stdin),(iS==iT? EOF:*iS++)):*iS++);}
int read(){int x=0,c=Get();while(!isdigit(c))c=Get();while(isdigit(c))x=x*10+c-48,c=Get();return x;}
}
using namespace IO;
const int N=1000007;
vector<int>E[N];queue<int>q;
int n,m,Q,x[N],y[N],pos[N],cnt=1,l[N],r[N],f[N],deg[N],bel[N];
void add(int u,int v){E[u].pb(v),++deg[v];}
int check(int x,int y)
{
if(!y||y==cnt+1) return 0;
if(x<y) --y;
return l[x]<=pos[y]&&pos[y]<=r[x];
}
void toposort()
{
for(int i=1;i<=cnt;++i) if(!deg[i]) q.push(i);
for(int u,f;!q.empty();)
{
u=q.front(),q.pop(),f=1;
while(f)
{
f=0;
while(check(u,l[u]-1)) l[u]=l[l[u]-1],f=1;
while(check(u,r[u]+1)) r[u]=r[r[u]+1],f=1;
}
for(int v:E[u]) if(!(--deg[v])) q.push(v);
}
}
int main()
{
n=read(),m=read(),Q=read();
for(int i=1;i<=m;++i) x[i]=read(),y[i]=read(),f[x[i]]=1;
f[n]=1;
for(int i=1;i<=n;++i) if(bel[i]=cnt,f[i]) l[cnt]=r[cnt]=cnt,++cnt;
--cnt;
for(int i=1,u,v;i<=m;++i)
{
u=bel[x[i]],v=bel[y[i]],pos[u]=v;
if(v<=u) add(u+1,u); else add(u,u+1);
}
toposort();
for(int u,v;Q;--Q) u=bel[read()],v=bel[read()],puts(l[u]<=v&&v<=r[u]? "YES":"NO");
}

Luogu P4436 [HNOI/AHOI2018]游戏的更多相关文章

  1. 【题解】Luogu P4436 [HNOI/AHOI2018]游戏

    原题传送门 \(n^2\)过百万在HNOI/AHOI2018中真的成功了qwqwq 先将没门分格的地方连起来,枚举每一个块,看向左向右最多能走多远,最坏复杂度\(O(n^2)\),但出题人竟然没卡(建 ...

  2. [洛谷P4436] HNOI/AHOI2018 游戏

    问题描述 一次小G和小H在玩寻宝游戏,有n个房间排成一列,编号为1,2,...,n,相邻的房间之间都有一道门.其中一部分门上锁(因此需要有对应的钥匙才能开门),其余的门都能直接打开.现在小G告诉了小H ...

  3. BZOJ5288 & 洛谷4436 & LOJ2508:[HNOI/AHOI2018]游戏——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5288 https://www.luogu.org/problemnew/show/P4436 ht ...

  4. luogu P4437 [HNOI/AHOI2018]排列

    luogu 问题本质是把\(a_i\)作为\(i\)的父亲,然后如果有环就不合法,否则每次要取数,要满足取之前他的父亲都被取过(父亲为0可以直接取),求最大价值 贪心想法显然是要把权值大的尽量放在后面 ...

  5. [HNOI/AHOI2018]游戏

    题目描述 https://lydsy.com/JudgeOnline/upload/201804/%E6%B9%96%E5%8D%97%E4%BA%8C%E8%AF%95%E8%AF%95%E9%A2 ...

  6. 【题解】Luogu P4438 [HNOI/AHOI2018]道路

    原题传送门 实际就是一道简单的树形dp 设f[u][i][j]表示从根结点到结点u经过i条未翻修公路,j条未翻修铁路的贡献最小值 边界条件:f[leaf][i][j]=(A+i)(B+j)C (题目上 ...

  7. BZOJ5288 HNOI/AHOI2018游戏

    首先将之间没有锁的房间合并.显然可达性具有传递性和反交换律(即若a能到达b,则b不能到达a). 考虑对每个房间找到其左右第一个(即与其最接近的)能作为起点到达它的房间.如果能求出这个,对此建两棵树,问 ...

  8. Luogu 4438 [HNOI/AHOI2018]道路

    $dp$. 这道题最关键的是这句话: 跳出思维局限大胆设状态,设$f_{x, i, j}$表示从$x$到根要经过$i$条公路,$j$条铁路的代价,那么对于一个叶子结点,有$f_{x, i, j} = ...

  9. Luogu P4426 [HNOI/AHOI2018]毒瘤

    题目 神仙题. 首先我们可以把题意转化为图的独立集计数.显然这个东西是个NP-Hard的. 然后我们可以注意到\(m\le n+10\),也就是说最多有\(11\)条非树边. 我们现在先考虑一下,树上 ...

随机推荐

  1. bootstrap面板的使用

    <div class="panel panel-primary"> <div class="panel-heading"> 头部 < ...

  2. 响应式web布局

    通过不同的媒体类型和条件定义样式表规则,媒体查询让CSS可以更精确作用于不同的媒体类型和同一媒体的不同条件.媒体查询的大部分媒体特性都接受min和max用于表达”大于或等于”和”小与或等于”.如:wi ...

  3. 通过nginx转发,用外网连接阿里云的redis,报Unexpected end of stream的解决办法

    一.在与redis同一个内网的服务器上A的nginx做了下面的设置 stream { upstream redis { server  redis.rds.aliyuncs.com:6379 max_ ...

  4. Linux安装JDK、tomcat

    修改tomcat 相关配置必须重启后才生效 如何启动tomcat 在终端框内切换到tomcat 的bin路径下 启动tomcat:./startup.sh 关闭tomcat:./shutdown.sh ...

  5. 如何安装Vscode软件及设置成中文界面?

    最新小编开始研究前端,想写点东东玩,要想开始首先就要安装工具,写前端有好几个工具,安装推荐开源的vscode,第一次安装是英文版的,如何修改成中文版,也是很简单的,跟随小编一起来安装设置工具吧. 方法 ...

  6. 在jdk7下慎用String.intern()作为synchronized的对象锁

    有一段这样的代码: for (int i = 0; i < 10000000; i++) { ("bluedavy" + i).intern(); if(i % 100 == ...

  7. Haskell 安装

    1.Ubuntu 安装过程中出现了一些问题: 1)W: An error occurred during the signature verification. The repository is n ...

  8. 阶段3 3.SpringMVC·_07.SSM整合案例_09.ssm整合之Spring整合MyBatis框架配置事务

    spring加入声明式的事物 配置事物 配置事物管理器 需要一个dataSource,引入上面的dataSource 配置事务通知 引入上面的transactionManager事物管理器 find开 ...

  9. 阿里巴巴 fastjson-1.2.12.jar json解析异常java.lang.ClassFormatError: Invalid method Code length 66865 in class file com/alibaba/fastjson/serializer/ASMSerializer_6_UserKdlb

    承接上篇:fastjson反序列化LocalDateTime失败的问题java.time.format.DateTimeParseException: Text '2019-05-24 13:52:1 ...

  10. shell脚本安装python、pip-----非交互式的--批量执行函数

    首先把pip-.tgz 安装包放在 /usr/local 下面,按照顺序先安装pip,再安装python.不要先安装或只安装python,否则很容易出错, cat >>pip-python ...