当前位置: 首页 > 编程日记 > 正文

历史 history

题目描述
历史学家小A正在研究一个奇怪的王国的历史。当前阶段的任务是研究该国的交通。
根据这个奇怪的王国的史书记载,史书开始记载前这个王国有 n 个城市(城市从 0 开
始标号) ,但所有城市之间都没有道路相连。
每一年,在位的国王会修建一条 x 到 y 的双向道路,一条道路可能被修建多次,但不会
修建起点和终点为同一个城市的道路。
而在这之间,国王会计划进行若干次旅行。对于计划进行的一次旅行 st->ed,如果当
时能完成这次旅行,而 t 年前不能完成这次旅行,那么国王会对之前的建设成果感到满意,
否则他会很生气,并在下一次计划旅行前都让史官记录下错误的修建道路的信息,即把 x、
y 记作(x+n-c) mod n,(y+n-c) mod n。
当然在这些年中也发生了若干次国王的交替,初始国王的 c 值为 0,而每个国王的 c 值
不一定相同,但在国王在位期间 c 值不会改变,新上位的国王开始处于不生气的状态。
请根据史书帮助小 A 得出国王每次对于计划旅行是否满意,从而辅助小 A 能够研究该
国的交通信息。

输入格式
第一行为两个整数 n,m,表示初始城市数和历史书记载的内容数。
接下来 m 行,每行是以下三种格式之一:
1 . K v :表示国王交替,新国王的 c 值为 v
2 . R x y:表示史书上记载的是国王修建了 x 到 y 的双向道路,但注意这个记录的可
能不是实际状况。
3 . T st ed t: 表示国王计划进行的一次 st->ed 的旅行, 且比较的是 t 年前的情况 (国
王可能会和史书开始记载以前的情况比较) ,注意这个记录的肯定是实际情况。
注意只有遇到 R 操作才会使年份的计数+1。

输出格式
输对于每个 T 的记录输出一行, 如果此次计划旅行令国王满意, 则输出 Y, 否则输出 X。

样例输入
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

样例输出
Y
N
Y

数据范围与约定
对于 30%的数据,保证 n<=1000 ,m<=3000。
另 30%的数据满足没有发生国王的交替。
对于 100%的数据,保证 n,m<=300000,0<=v,x,y,st,ed < n,0<=t< m。
数据有梯度

离线每次询问都建立一个并查集,会超时。
正解做法:
在并查集上加上一个参数为时间,记录x与它的父亲连接的时间,那么这样就不能路径压缩了。
为了避免超时,我们需要按秩合并,将规模小的并查集合并到规模大的并查集上。
此题需要注意一个问题,城市的序号是从0开始的,在样例中可以看出来。
代码:

#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<cstdio>
#define N 300009
using namespace std;
int n,m,c,f[N],year[N],size[N],tim;
bool angry;
int find(int x,int t)
{while(x!=f[x]&&year[x]<=t) x=f[x];return x;
}
int main()
{scanf("%d%d",&n,&m);c=0;angry=false;for(int i=0;i<=n;i++) f[i]=i,size[i]=1;for(int i=1;i<=m;i++){char Q[10];int x,y,z;scanf("%s",Q);if(Q[0]=='K'){cin>>c;angry=false;continue;}if(Q[0]=='R'){scanf("%d%d",&x,&y);if(angry){if((x+=c)>=n) x-=n;if((y+=c)>=n) y-=n;}tim++;x=find(x,tim),y=find(y,tim);if(x==y) continue;if(size[x]<size[y]){size[y]+=size[x];f[x]=y;year[x]=tim;}else {size[x]+=size[y];f[y]=x;year[y]=tim;}continue;}if(Q[0]=='T'){scanf("%d%d%d",&x,&y,&z);angry=((find(x,tim-z)==find(y,tim-z))||(find(x,tim)!=find(y,tim)));if(angry) printf("N\n");else printf("Y\n");continue;}}return 0;
}
/*
6 6
K 3
R 1 2
T 1 5 1
R 3 5
T 2 6 1
T 1 6 1
*/

转载于:https://www.cnblogs.com/dfsac/p/7587793.html

相关文章:

LeetCode实战:Nim 游戏

背景 为什么你要加入一个技术团队&#xff1f;如何加入 LSGO 软件技术团队&#xff1f;我是如何组织“算法刻意练习活动”的&#xff1f;为什么要求团队的学生们写技术Blog 题目英文 You are playing the following Nim Game with your friend: There is a heap of stones on…

python值得报班学习吗

python值得报班学习吗?最近有很多想要学习Python的同学都会问到这个问题&#xff0c;Python在近几年的发展前景是非常不错的&#xff0c;想要学会Python编程语言&#xff0c;建议还是报班学习&#xff0c;来看看下面的详细介绍吧。 ​  python值得报班学习吗?首先Python值不…

LeetCode实战:2的幂

背景 为什么你要加入一个技术团队&#xff1f;如何加入 LSGO 软件技术团队&#xff1f;我是如何组织“算法刻意练习活动”的&#xff1f;为什么要求团队的学生们写技术Blog 题目英文 Given an integer, write a function to determine if it is a power of two. Example 1: …

P1214 等差数列

https://www.luogu.org/problem/show?pid1214#sub 暴力枚举题&#xff0c;加上一些剪枝。 &#xff08;原谅我卑劣地提交了两个答案特判&#xff09; #include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<algorit…

cocos2d 0.99.5版本屏幕默认是横屏,怎么修改为竖屏呢?

在RootViewController.m文件里面&#xff0c;修改如下代码#elif GAME_AUTOROTATION kGameAutorotationUIViewController // // EAGLView will be rotated by the UIViewController // // Sample: Autorotate only in landscpe mode // // return YES for th…

学习java三个技巧要知道!

java一直是IT行业发展前景非常不错的一门编程语言&#xff0c;学起来是相对有点困难的&#xff0c;尤其是零基础学员&#xff0c;要想学好java技术&#xff0c;一定要知道这三个技巧&#xff0c;来看看下面的详细介绍就知道了。 学习java三个技巧要知道! 1. 树立学习的信心 很多…

LeetCode实战:格雷编码

背景 为什么你要加入一个技术团队&#xff1f;如何加入 LSGO 软件技术团队&#xff1f;我是如何组织“算法刻意练习活动”的&#xff1f;为什么要求团队的学生们写技术Blog 题目英文 The gray code is a binary numeral system where two successive values differ in only o…

Programmer of Practice Manual

这是我以前再读研究生的时候写的东东&#xff0c;希望搞计算机的同学&#xff0c;教计算机本科生学习技术的文章&#xff08;非算法类&#xff09;粘在这里纪念一下。 大一寒假 结构化编程基础&#xff1a; 图书&#xff1a;《How to C》 实践过程&#xff1a;完成课后的习题&a…

改善C#程序的建议3:在C#中选择正确的集合进行编码

原文:改善C#程序的建议3&#xff1a;在C#中选择正确的集合进行编码要选择正确的集合&#xff0c;我们首先要了解一些数据结构的知识。所谓数据结构&#xff0c;就是相互之间存在一种或多种特定关系的数据元素的集合。结合下图&#xff0c;我们看一下对集合的分类。 集合分类 …

Python工程师求职必知的经典面试题

最近几年&#xff0c;学习Python语言的同学越来越多&#xff0c;学成之后大家对于后期的面试都遇到了很多难题&#xff0c;小编这次为大家整理了一份关于Python工程师求职必知的经典面试题!希望能够帮助到正在找Python工作的同学们。 Python工程师求职必知的经典面试题&#xf…

LeetCode实战:二叉树中的最大路径和

背景 为什么你要加入一个技术团队&#xff1f;如何加入 LSGO 软件技术团队&#xff1f;我是如何组织“算法刻意练习活动”的&#xff1f;为什么要求团队的学生们写技术Blog 题目英文 Given a non-empty binary tree, find the maximum path sum. For this problem, a path i…

为Visual Studio添加配色方案

看到网上有一些教程&#xff0c;他们的代码截图&#xff0c;不是VS默认的白底黑字&#xff0c;觉得挺好看&#xff0c;就也把自己的VS鼓捣了一把&#xff1a; 使用的是现成的配色方案&#xff0c;试了好几种&#xff0c;就觉得这个看着舒服son-of-obsidian.vssettings 你可以去…

黑色星期五阿里云向海淘输出双11技术

本文讲的是"黑色星期五"阿里云向海淘输出双11技术【IT168资讯】11月27日零点&#xff0c;“黑色星期五”正式到来&#xff0c;虽然远在中国的消费者无法参与海外的实体抢购&#xff0c;但电商平台却给了他们从地球另一端参与“大抢购”的机会。随着近年海淘市场的不断…

专业的java培训机构是否靠谱,对比一下就知道了!

java在IT行业的火热是有目共睹的&#xff0c;所以市面上有很多机构都抓住了这点&#xff0c;开设了java培训课程&#xff0c;想要找到一个适合自己的java培训机构&#xff0c;多进行对比就知道了! 专业的java培训机构是否靠谱&#xff0c;对比一下就知道了!专业的Java培训机构靠…

LeetCode实战:环形链表 II

背景 为什么你要加入一个技术团队&#xff1f;如何加入 LSGO 软件技术团队&#xff1f;我是如何组织“算法刻意练习活动”的&#xff1f;为什么要求团队的学生们写技术Blog 题目英文 Given a linked list, return the node where the cycle begins. If there is no cycle, re…

.NET中使用OracleHelper

以前一直使用MSSQL,数据库操作类也是自己写的.现在项目使用Oracle,数据库操作类用的是MICROSOFT的DAAB中的OracleHelper.实际使用过程中,发现坛内少有此方面使用经验的贴子,故在这里把我使用中的一点经验用几个例子说明一下,希望起到抛砖引玉的作用. 查询数据方面: 1.简单的SQL…

新勒索软件DynA-Crypt不仅要加密你的文件,而且窃取并删除它们

本文讲的是新勒索软件DynA-Crypt不仅要加密你的文件&#xff0c;而且窃取并删除它们&#xff0c;一个名为DynA-Crypt的新勒索软件被GData公司的恶意软件分析师Karsten Hahn发现&#xff0c;DynA-Crypt不仅能加密你的数据&#xff0c;而且试图从受害者的计算机窃取大量信息。虽然…

【Postman】6 Postman 发送post请求-Json格式

一、post请求说明 使用postman发送一个post请求&#xff0c;在上文中测试流程中提到的4个要素&#xff1a;URL、请求方式、请求头部信息及body数据。 body中设置的请求参数&#xff0c;常见的有如下三种&#xff1a; 1、x-www-from-urlencoded格式 2、form data格式 3、Json格式…

LeetCode实战:最小栈

背景 为什么你要加入一个技术团队&#xff1f;如何加入 LSGO 软件技术团队&#xff1f;我是如何组织“算法刻意练习活动”的&#xff1f;为什么要求团队的学生们写技术Blog 题目英文 Design a stack that supports push, pop, top, and retrieving the minimum element in co…

配置国内 Docker Registry Mirror

由于国内特殊的网络环境&#xff0c;往往我们从Docker Hub中拉取镜像并不能成功&#xff0c;而且速度特别慢。 那么我们可以给Docker配置一个国内的registry mirror&#xff0c;当我们需要的镜像在mirror中则直接返回&#xff0c;如果没有则从Docker Hub中拉取。是否使用regist…

Java培训深度学习都要学什么

java的知识点有很多&#xff0c;如果是有java基础的同学&#xff0c;进行深度学习是非常有必要的&#xff0c;比较职场技能更新迭代非常的快&#xff0c;那么java培训深度学习都要学什么呢?来看看下面的详细介绍。 Java培训深度学习都要学什么? Java深度学习要掌握两点&#…

LeetCode实战:相交链表

背景 为什么你要加入一个技术团队&#xff1f;如何加入 LSGO 软件技术团队&#xff1f;我是如何组织“算法刻意练习活动”的&#xff1f;为什么要求团队的学生们写技术Blog 题目英文 Write a program to find the node at which the intersection of two singly linked lists…

# 30 天精通 RxJS (01):认识 RxJS

RxJS 是笔者认为未来几年内会非常红的 Library&#xff0c;RxJS 提供了一套完整的非同步解决方案&#xff0c;让我们在面对各种非同步行为&#xff0c;不管是 Event, AJAX, 还是 Animation 等&#xff0c;我们都可以使用相同的 API (Application Programming Interface) 做开发…

ThickBox 3.1参数详解(转)

前几天写了一篇关于ThickBox 3.1的文章&#xff1a;今天在使用这个东西的时候发现里面有许多参数没有详细解释&#xff0c;今天抽空整理出来&#xff0c;现和大家分享一下&#xff1a;先说几个参数&#xff1a;class"thickbox" 调用特效&#xff1b;height 打开页面的…

最新Java培训-NIO实战教程

Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始)&#xff0c;Java NIO提供了与标准IO不同的IO工作方式。NIO可以理解为非阻塞IO,传统的IO的read和write只能阻塞执行&#xff0c;线程在读写IO期间不能干其他事情&#xff0c;比如调用socket.read()时&am…

获取执行SQL语句的返回结果

最近遇到的问题&#xff0c;在存储过程中需要拼接动态SQL语句&#xff0c;用变量保存&#xff0c;可直接使用EXECUTE SP_EXECUTESQL是不能获取想要的结果的 于是经过baidu了一番后&#xff0c;找到了解决的办法 declare coun int,sql nvarchar(2000)setsqlselect councount(*) …

Word文档使用密码加密

Word文档使用密码加密 方法如下&#xff1a; 文件-->信息-->保护文档-->用密码进行加密-->设置密码

LeetCode实战:反转链表

背景 为什么你要加入一个技术团队&#xff1f;如何加入 LSGO 软件技术团队&#xff1f;我是如何组织“算法刻意练习活动”的&#xff1f;为什么要求团队的学生们写技术Blog 题目英文 Reverse a singly linked list. Example: Input: 1->2->3->4->5->NULL Ou…

【UI设计培训】字体设计-偏旁部首变形

UI设计培训中字体设计也是非常重要的一节课&#xff0c;字体在UI设计岗位中可以说用到的频率是非常高的&#xff0c;是设计师必须学会并且要有娴熟运用的一项必备技能&#xff0c;在进行汉字设计的时候&#xff0c;可以把汉字拆分成几个偏旁部首的形式进行设计&#xff0c;这样…

【转帖】如何通过 javascript 访问 GridView/DataGrid 选中 CheckBox 行各列的值

功能需求1, 单击 checkbox 返回当前行值2, 外部按钮获取所有选择行的值实现说明参见主要代码&#xff0c;代码为自说明式。原文地址&#xff1a;http://www.cnblogs.com/Jinglecat/archive/2007/07/15/818967.html主要代码 <asp:GridView ID"GridView1" runat&q…