Description

Input

Output

Sample Input
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

Sample Output
Y
N
Y

Data Constraint

.
.
.
.
.

分析

【简洁且能够处理询问也强制在线的情况】
30%做法:暴力存下每次的并查集。复杂度O(nm)。
70%做法:熟悉数据结构的同学应该很容易想到这个做法。这道题显然可以用可持久化并查集维护,用按秩合并套上一个可持久化线段树维护fa数组。复杂度O(nlog2n),由于数据有梯度,这个做法本地测试时给了70%的分数。但是要是又遇到跑得十分快的评测机,那我也是没办法了。/微笑/微笑/微笑
100%做法:实际上我们并没有基于历史来修改fa数组,而只是基于历史查询,所以并不需要使用真正的可持久化。考虑套用上做法一,在并查集的边上存下这条边建立的时间。查询时查询一下到并查集的根这条路径的最小值即可知道两个结点连通的时间。复杂度O(nlogn),可以拿到100%的分数。
.
.

注意:要读入优化!

.
.
.
.
.

程序:
#include<iostream>
#include<stdio.h>
using namespace std;
int f[300001],sz[300001],year[300001],n,m,x,y,t,c=0,yr=0;
char zf[3];
bool bz=false;inline void read(int &x)
{x=0;char c=getchar();while (c<'0' || c>'9') c=getchar();while (c>='0' && c<='9'){x=x*10+c-'0';c=getchar();}
}int find(int x, int t)
{while (x!=f[x]&&year[x]<=t) x=f[x];return x;
}int main()
{read(n);read(m);for (int i=0;i<n;i++) {f[i]=i; sz[i]=1;}while (m--) {scanf("%s",&zf);if (zf[0]=='K'){ read(c);bz=false; continue;}if (zf[0]=='R'){ read(x);read(y);if (bz==true) {if ((x+=c)>=n) x-=n;if ((y+=c)>=n) y-=n;}yr++;x=find(x,yr); y=find(y,yr);if (x==y) continue;if (sz[x]<sz[y]) {f[x]=y;sz[y]+=sz[x];year[x]=yr;} else {f[y]=x;sz[x]+=sz[y];year[y]=yr;}continue;}if (zf[0]=='T'){ read(x);read(y);read(t);if (bz=((find(x,yr-t)==find(y,yr-t))||(find(x,yr)^find(y,yr)))) printf("N\n"); else printf("Y\n");}}return 0;
}

转载于:https://www.cnblogs.com/YYC-0304/p/9499924.html

【GDOI2016模拟3.11】历史相关推荐

  1. jzoj4382-[GDOI2016模拟3.11]历史【并查集】

    正题 题目大意 有若干个事件 Kc:cK\ c:cK c:c值更改并且清除生气状态 Rxy:R\ x\ y:R x y:新建一条x′x'x′到y′y'y′的边,若当前处于生气状态则x=(x′+n−c) ...

  2. 【GDOI2016模拟3.16】幂(容斥 + 模型复杂转化)

    [GDOI2016模拟3.16]幂 \(X\in[1,A],Y\in[1,B]\),问:\(x^y\)的不用取值个数. \(A,B\)都是\(10^9\)级别. 然后我们开搞. 首先,假设一个合法的\ ...

  3. C语言模拟11答案,C语言模拟试题11答案.doc

    C语言模拟试题11答案.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档 ...

  4. 备战Noip2018模拟赛11(B组)T4 Path 好路线

    10月27日备战Noip2018模拟赛11(B组) T4路径好路线 题目描述 nodgd在旅游.现在,nodgd要从城市的西北角走到东南角去.这个城市的道路并不平坦,nodgd希望找出一条相对比较好走 ...

  5. JZOJ 3947 . 【省常中JSOI模拟】收历史作业

    Description 小W 回到了教室,可怜的他要收历史作业,但是0901 班这群不负责任的组长把作业收得乱七八糟,散得每个座位上都有作业本,小W 只好挨个去收. 0901 班的教室可以看作是一个n ...

  6. CMOS模拟集成电路发展历史、设计特点、设计流程

    集成电路发展历史: 20世纪50年代,小规模集成电路,small scale Intergrated circuits,集成度个元件 20世纪60年代,中规模集成电路,medium scale Int ...

  7. NOIP2018 模拟 9.11

    ISIJ 2018 很多序列(Training Round D4T3) 题目名称:很多序列 文件名:sequences.in / sequences.out 题目描述 假设 $ x_1 < x_ ...

  8. Linux(11)--(历史命令)Ctrl+r, history,!

    日常用到的指令 1.Ctrl+r--匹配查找历史命令 2.history [n] --列出历史命令 3.!--执行历史命令 1.Ctrl+r–匹配查找历史命令 按照模糊印象查询历史命令:就用Ctrl+ ...

  9. 【GDOI2016模拟3.10】习用之语

    Description 有N个长度为4的字符串,求着N个字符串中有多少对差且仅相差d个字符. N<=50000 Solution 对于这种差且仅相差的题目,一般都会用容斥原理. 首先,我们统计出 ...

最新文章

  1. 《AngularJS深度剖析与最佳实践》一2.2 模块
  2. java.util.Date和java.sql.Date之间的相互转换
  3. mysql pxc测试_Mysql同步机制 - PXC 压力测试 tpcc安装及使用
  4. 2012.7.24---C#(2)
  5. Mybatis(6)CURD增删改查操作
  6. multism中ui和uo应该怎么表示_欧阳娜娜上节目痛哭,坦言压力太大睡不着,明星都怎么了?...
  7. 华为机试HJ51:输出单向链表中倒数第k个结点
  8. python——学习登录用户和密码的判断——1
  9. 基于AE+C#的栅格IDW插值的实现
  10. 指数/对数/WIN10计算器
  11. Apache Roller 5.0 安装部署
  12. 金蝶KIS旗舰版新建,恢复帐套时提示:ActiveX部件不能创建对象
  13. 通达信指标公式编写常用函数(七)——SUMBARS以及MACD底背离
  14. linux中yum provide,linux之yum
  15. 3阶魔方阵c语言算法,3阶魔方阵的算法
  16. 计算机仿真工具软件,计算机仿真技术
  17. 【学习笔记之Linux】工具之gcc/g++
  18. CodeForces入门
  19. VCC、VDD、VSS
  20. 群晖NAS 7.X版搭建博客网站,并内网穿透发布公网可访问 6-8

热门文章

  1. 科大星云诗社动态20210329
  2. 台湾大学林轩田机器学习基石课程学习笔记1 -- The Learning Problem
  3. java写界面_java能不能直接做界面窗口
  4. crtlc不能复制文件_ctrl+c不能复制怎么办
  5. mybatis注册了mapper但是还是报错_springboot整合Mybatis
  6. 怎么把网页源码家入hexo博客_一款被大厂选用的 Hexo 博客主题
  7. [scala-spark]12. RDD行动操作
  8. C#中线程池的简单应用
  9. js按键处理demo
  10. 替换空格---剑指Offer