网上基本上找不到这道题,何况LJJ还稍微改了一下......

原题:传送门

题目描述

ljj 被S 国数不清的漂亮小姐姐所吸引,为了搞清楚为什么S 国有如此多的漂亮小姐姐,他决定研究S 国的历史。

根据S 国史书的记载,在史书记载前,S 国有n 个城市(城市编号0~n-1),它们彼此之间都没有道路相连,但一个城市内是联通的。

每一年,在位的国王会在城市x,y 之间修建一条双向道路,一条道路可能被修建多次,但修建双向道路的起点和终点不会是同一个城市。

而在这之间,国王会计划进行若干次旅行。对于计划进行的一次旅行st->ed,

如果当时能完成这次旅行。而t 年前不能完成这次旅行,国王会对之前的建设成果感到满意,

否则他会很生气,并改变接下来所有计划修建的道路,即让实际修建的道路的x,y 更换为(x+c)%n,(y+c)%n,

生气状态持续到下一次旅行开始,旅行的起点和终点可能是同一个城市。

当然这些年中也发生了若干次国王的交替,初始国王的c 值为0,而之后每个国王的c 值不一定相同。

一个国王在位期间,他的c 值不会改变,刚登基的国王处于不生气的状态。

请根据史书帮助ljj 得出国王对于每次旅行是否满意,如果你全部分析正确的话,他说不定会给你介绍一个漂亮的小姐姐呢。

输入

本题含有多组测试数据!

对于每组数据第一行两个整数n,m 表示城市数和史书记载的内容数。

接下来m 行,每行是以下三种格式之一:

1.K c,表示国王交替,以及新国王的c 值(含义如题目所述)。

2.R x y,表示国王计划在x,y 之间修建一条双向道路,但可能会因为国王生气,并不会在x,y 之间修建道路,具体见题目描述。

3.T st ed t,表示国王计划进行一次从st 到ed 的旅行,且比较的是t 年前的情况(国王可能会史书开始记载以前的情况比较)。

注意只有遇到R 操作才会使实际年份+1。

输出

对于每个T 操作输出一行,如果国王满意输出Y,否则输出N。

样例输入1

3 7

R 0 1

T 0 1 1

K 1

R 0 1

T 0 1 1

R 0 1

T 0 2 1

样例输出1

Y

N

Y

数据范围与约定

对于30%的数据,1<=n<=1000,1<=m<=3000。

另30%数据满足没有任何国王交替。

对于100%的数据,满足1<=n,m<=3*10^5,0<= v,x,y,st,ed <n,0<= t <m。

数据有一定梯度,每个测试点数据组数<=3

题解

这道题做法有很多。

我第一眼看还以为是可持久化并查集,果断打了暴力......

显然可以离线做,但是这道题仅仅是修改强制在线。

如果是询问也强制在线,就不能离线做了。

正解其实是并查集按秩合并。

由于是按秩合并,每个点的父亲只会被修改一次(从它自己变成另一个点)。

所以记录一下父亲被更改的时间。

找祖先的时候,给一个时间限制y,如果t[i]>y,则那个连接实际上在y时间下是不存在的,就不能继续向上找了。

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; int n,m,c,yr,ang;
int f[];
int sz[];
int t[]; int read()
{
char c=getchar();int ret=;
while(c<''||c>'')c=getchar();
while(c>=''&&c<='')ret=ret*+c-'',c=getchar();
return ret;
} int findfa(int p,int y)
{
while(f[p]!=p&&t[p]<=y)p=f[p];
return p;
} int main()
{
freopen("history.in","r",stdin);
freopen("history.out","w",stdout);
while(scanf("%d%d",&n,&m)!=EOF)
{
c=yr=ang=;
for(int i=;i<n;i++)f[i]=i,sz[i]=,t[i]=;
for(int i=;i<=m;i++)
{
char op[];
scanf("%s",op+);
if(op[]=='K')
{
ang=;
c=read();
}
if(op[]=='R')
{
int x=read(),y=read();
if(ang)x=(x+c)%n,y=(y+c)%n;
yr++;
x=findfa(x,yr),y=findfa(y,yr);
if(x==y)continue;
if(sz[x]<sz[y])swap(x,y);
f[y]=x;
sz[x]+=sz[y];
t[y]=yr;
}
if(op[]=='T')
{
int x=read(),y=read(),tt=read();
int nx=findfa(x,yr),ny=findfa(y,yr);
int px=findfa(x,yr-tt),py=findfa(y,yr-tt);
if(px!=py&&nx==ny)printf("Y\n"),ang=;
else printf("N\n"),ang=;
}
}
}
fclose(stdin);
fclose(stdout);
return ;
}

History

18.09.22模拟赛T2 历史的更多相关文章

  1. 18/9/21模拟赛-Updated

    18/9/21模拟赛 期望得分:100:实际得分:0  qwq 拿到题目第一眼,我去,这不是洛谷原题(仓鼠找Sugar)吗 又多看了几眼,嗯,对,除了是有多组数据外,就是原题 然后码码码....自以为 ...

  2. 模拟赛T2 交换 解题报告

    模拟赛T2 交换 解题报告 题目大意: 给定一个序列和若干个区间,每次从区间中选择两个数修改使字典序最小. \(n,m\) 同阶 \(10^6\) 2.1 算法 1 按照题意模拟,枚举交换位置并比较. ...

  3. EZ 2018 03 09 NOIP2018 模拟赛(三)

    最近挺久没写比赛类的blog了 链接:http://211.140.156.254:2333/contest/59 这次的题目主要考验的是爆搜+打表的能力 其实如果你上来就把所有题目都看过一次就可以知 ...

  4. 20180530模拟赛T2——绀碧之棺

    题目背景 qiancl 得到了一张藏宝图,上面写了一道谜题. 题目描述 定义\(F(n)\)为 n 在十进制下各个数位的平方和,求区间\([a,b]\)中有多少\(n\)满足\(k\times F(n ...

  5. 2019.11.11 模拟赛 T2 乘积求和

    昨天 ych 的膜你赛,这道题我 O ( n4 ) 暴力拿了 60 pts. 这道题的做法还挺妙的,我搞了将近一天呢qwq 题解 60 pts 根据题目给出的式子,四层 for 循环暴力枚举统计答案即 ...

  6. 20161005 NOIP 模拟赛 T2 解题报告

    beautiful 2.1 题目描述 一个长度为 n 的序列,对于每个位置 i 的数 ai 都有一个优美值,其定义是:找到序列中最 长的一段 [l, r],满足 l ≤ i ≤ r,且 [l, r] ...

  7. 20161003 NOIP 模拟赛 T2 解题报告

    Weed duyege的电脑上面已经长草了,经过辨认上面有金坷垃的痕迹. 为了查出真相,duyege 准备修好电脑之后再进行一次金坷垃的模拟实验. 电脑上面有若干层金坷垃,每次只能在上面撒上一层高度为 ...

  8. NOIP欢乐模拟赛 T2 解题报告

    小澳的坐标系 (coordinate.cpp/c/pas) [题目描述] 小澳者表也,数学者景也,表动则景随矣. 小澳不喜欢数学,可数学却待小澳如初恋,小澳睡觉的时候也不放过. 小澳的梦境中出现了一个 ...

  9. 2019.03.09 ZJOI2019模拟赛 解题报告

    得分: \(20+0+40=60\)(\(T1\)大暴力,\(T2\)分类讨论写挂,\(T3\)分类讨论\(40\)分) \(T1\):天空碎片 一道神仙数学题,貌似需要两次使用中国剩余定理. 反正不 ...

随机推荐

  1. FPGA的基本组成单元LUT,以及三种核的概念

    .查找表 LUT就是查找表,对于4输入的LUT而言,实际上就是4位地址位,一位数据位的存储器,能够存储16位数据,所以我们在FPGA设计中可以用LUT组建分布式的RAM. 这样也可以解释我们在设计中为 ...

  2. linux的/dev内容介绍

    http://www.cnblogs.com/lidabo/p/4505360.html 这个结合那个linux的终端介绍 https://zhidao.baidu.com/question/1742 ...

  3. 吴裕雄--天生自然 PYTHON3开发学习:基本数据类型

    #!/usr/bin/python3 counter = 100 # 整型变量 miles = 1000.0 # 浮点型变量 name = "runoob" # 字符串 print ...

  4. JS—DOM操作

    节点分为三类: 1.元素节点:标签<div></div> 2.文本节点:标签内的纯文本. 3.属性节点:标签内的属性,id或class 查找元素: getElementById ...

  5. docker---安装docker

    今天开始要初步的学习 docker 了,这也是进入虚拟化方向的一个步骤,学习一个东西首先要从搭建环境开始,哈哈 安装环境及版本: 系统:Ubuntu18.04 STL Docker 版本:19.03. ...

  6. Linux-waitpid介绍

    1.waitpid与wait差别 (1).基本功能是一样的,都是用来回收子进程 (2).waitpid可以回收指定PID的子进程 (3).waitpid可以阻塞式或非阻塞式两种工作模式 2.代码示例 ...

  7. ant design for vue select 数据回显问题

    例如: 想要回显id为1的温度, 结果直接在select框中显示了1,而不是选中了温度, 此时因为select中的value是string类型, 而我们设置的id是number类型, 对应不上, 所以 ...

  8. Python 学习笔记:根据输入年月获取该月的第一天和最后一天

    目的: 给定一个时间,比如:2020.02,要求返回所输入月份的第一天及最后一天,比如:('2020.02.01', '2020.02.29') 参考博客:https://blog.csdn.net/ ...

  9. 了解Kafka生产者

    了解Kafka生产者 ​ 之前对kafka的整体架构有浅显的了解,这次正好有时间,准备深入了解一下kafka,首先先从数据的生产者开始吧. 生产者的整体架构 ​ 可以看到整个生产者进程主要由两个线程进 ...

  10. 给Office文档添加水印效果【测试有效】

    private void button1_Click(object sender, EventArgs e) { string test1 = "C:\\test.docx";// ...