题面

题解

这道题目到底有没有靠谱一点的解法啊。。。

有很多种\(\color{green}{\mathrm{AC}}\)的方法,设\(L[i],R[i]\)表示点\(i\)最左边和最右边能够到达的位置

于是就有正着推\(20\)分,反着推\(\color{green}{\mathrm{AC}}\)

还可以拓扑排序,正着加点\(\color{#001277}{\mathrm{TLE}}\),反着加点\(\color{green}{\mathrm{AC}}\)

所以也没有什么好讲的了。

代码

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#include<queue>
#define RG register
#define file(x) freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout)
#define clear(x, y) memset(x, y, sizeof(x)) inline int read()
{
int data = 0, w = 1; char ch = getchar();
while(ch != '-' && (!isdigit(ch))) ch = getchar();
if(ch == '-') w = -1, ch = getchar();
while(isdigit(ch)) data = data * 10 + (ch ^ 48), ch = getchar();
return data * w;
} const int maxn(1e6 + 10);
struct edge { int next, to; } e[maxn];
int head[maxn], e_num, deg[maxn]; inline void add_edge(int from, int to)
{
e[++e_num] = (edge) {head[from], to};
head[from] = e_num; ++deg[to];
} int n, m, Q, p[maxn], cnt, key[maxn], L[maxn], R[maxn];
void TopSort()
{
std::queue<int> Q;
for(RG int i = n; i; i--) if(!deg[i]) Q.push(i);
while(!Q.empty())
{
int x = Q.front(); Q.pop(); p[++cnt] = x;
for(RG int i = head[x]; i; i = e[i].next)
if(!--deg[e[i].to]) Q.push(e[i].to);
}
} void calc(int x)
{
int l = x, r = x;
while(1)
{
int pl = l, pr = r;
while(l > 1 && (!key[l - 1] || (l <= key[l - 1] && key[l - 1] <= r)))
l = L[l - 1];
while(r < n && (!key[r] || (l <= key[r] && key[r] <= r))) r = R[r + 1];
if(pl == l && pr == r) break;
}
L[x] = l, R[x] = r;
} int main()
{
n = read(), m = read(), Q = read();
for(RG int i = 1, x, y; i <= m; i++)
{
x = read(), y = read(), key[x] = y;
if(y <= x) add_edge(x + 1, x);
else add_edge(x, x + 1);
}
TopSort();
for(RG int i = 1; i <= n; i++) L[i] = R[i] = i;
for(RG int i = 1; i <= n; i++) calc(p[i]);
while(Q--)
{
int S = read(), T = read();
puts(L[S] <= T && T <= R[S] ? "YES" : "NO");
}
return 0;
}

【HNOI2018】游戏的更多相关文章

  1. 【BZOJ5288】[HNOI2018]游戏(拓扑排序)

    [BZOJ5288][HNOI2018]游戏(拓扑排序) 题面 BZOJ 洛谷 题解 去年省选的时候这题给我乱搞整过去整过去了,也是虐心了.... 所以当然是来讲正儿八经的正确做法啦. 很明显,我们需 ...

  2. 5288: [Hnoi2018]游戏

    5288: [Hnoi2018]游戏 链接 分析: 考虑y<=x的怎么做,那么只能从左边走到右边.我们可以从最右边的点开始,一次确定每个点往右边可以走多少. L[x],R[x]分别是x向左向右最 ...

  3. 【BZOJ5288】[HNOI2018]游戏(乱搞?)

    [BZOJ5288][HNOI2018]游戏(乱搞?) 题面 BZOJ 洛谷 题面自己到洛谷上看把 题解 考场上乱搞拿到了\(90\)分,简直不敢相信. 回家把代码再交了一份直接就\(AC\)了??? ...

  4. bzoj 5288: [Hnoi2018]游戏

    Description Solution 乱搞能A的题,毁我青春 记忆化一下扩展过程 只要不是从 \(1\) 枚举到 \(n\) 去扩展都可以 \(AC\) 于是 \(random\_shuffle\ ...

  5. BZOJ.5288.[AHOI/HNOI2018]游戏(思路 拓扑)

    BZOJ LOJ 洛谷 考虑如何预处理每个点能到的区间\([l,r]\). 对于\(i,i+1\)的一扇门,如果钥匙在\(i\)的右边,连边\(i\to i+1\),表示从\(i\)出发到不了\(i+ ...

  6. [HNOI2018]游戏[拓扑排序]

    题意 题目链接 分析 先将没有锁的房间缩点,首先有一个 \(O(n^2)\) 的想法:从每个点出发,每次检查能否向两边扩张. 容易发现门和门之间如果有锁,必然只有一方能够开锁(只有一把钥匙),并且能够 ...

  7. 【比赛】HNOI2018 游戏

    考试的时候线段树区间查询的return条件打成了l==r....于是光荣爆20(线段树都不会打了?) 看膜博士的题解 #include<bits/stdc++.h> #define ui ...

  8. [BZOJ5288][HNOI2018]游戏(拓扑排序)

    传送门:https://www.luogu.org/problemnew/show/P4436 20分的暴力加一个Random_shuffle就A了.我还能说什么.. 不过这个也不是毫无道理,复杂度应 ...

  9. bzoj5288: [Hnoi2018]游戏

    我还是太年轻了... 考场上就是直接枚举预处理当前位置左右延伸到的最远距离,好像是水了20.. 然后噶爷爷居然随机一下就AC了????mengbier #include<cstdio> # ...

  10. # HNOI2012 ~ HNOI2018 题解

    HNOI2012 题解 [HNOI2012]永无乡 Tag:线段树合并.启发式合并 联通块合并问题. 属于\(easy\)题,直接线段树合并 或 启发式合并即可. [HNOI2012]排队 Tag:组 ...

随机推荐

  1. SpringMVC在Controller层中注入request的坑

    记一次为了节省代码没有在方法体中声明HttpServletRequest,而用autowire直接注入所钻的坑 结论 给心急的人. 直接在Controller的成员变量上使用@Autowire声明Ht ...

  2. npm install "Unexpected end of JSON input while parsing near"问题

    问题 最近配了台新电脑,开始装Node环境,去官网下载了最新的Node安装包.安装也没有问题,但是在使用npm install这个命令的时候,就会出现Unexpected end of JSON in ...

  3. NaviCat SqlServer Windows 10 Update 1803 IM004 - Driver's SQLAllocHandle on SQL_HANDLE_ENV failed

    安装Windows 10 Update 1803后,Navicat连接SqlServer出现以下错误: IM004 - Driver's SQLAllocHandle on SQL_HANDLE_EN ...

  4. easyui中日期格式化

    <body>    <div id="list"></div>     <script type="text/javascrip ...

  5. 从外部导入django模块

    import os import sys sys.path.append("D:\\pyweb\\sf"); # 项目位置(不是app) os.environ.setdefault ...

  6. ln 硬链接介绍

    硬链接:在linux文件系统中多个文件名指向同一个索引节点(Inode)是正常允许的.硬链接文件就相当于文件的另一个入口. 硬链接的作用:允许一个文件拥有多个有效路径(多个入口),这样用户就可以建立硬 ...

  7. Android中两个Activity之间简单通信

    在Android中,一个界面被称为一个activity,在两个界面之间通信,采用的是使用一个中间传话者(即Intent类)的模式,而不是直接通信. 下面演示如何实现两个activity之间的通信. 信 ...

  8. ELK安装过程

    官方安装文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/zip-targz.html 官方硬件和配置项推荐:htt ...

  9. IIS中“绑定”,“IP地址全部未分配”到底是个什么玩意

    最好是选择“全部未分配”,用这个选项时,服务器本机,在IE浏览器地址栏输入http://localhosts/ 或127.0.0.1 可以打开本机架设的网站的主页,也可以输入内网IP地址打开内网的网站 ...

  10. sql点滴45—mysql中group_concat用法

    group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果.比较抽象,难以理解. 通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一组, ...