History

3.1 题目描述
历史学家小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 能够研究该
国的交通信息。
3.2 输入格式
第一行为两个整数 n,m,表示初始城市数和历史书记载的内容数。
接下来 m 行,每行是以下三种格式之一:
1 . K v :表示国王交替,新国王的 c 值为 v
2 . R x y:表示史书上记载的是国王修建了 x 到 y 的双向道路,但注意这个记录的可
能不是实际状况。
3 . T st ed t:表示国王计划进行的一次 st->ed 的旅行,且比较的是 t 年前的情况(国
NOIP 模拟试题 #5
7
王可能会和史书开始记载以前的情况比较),注意这个记录的肯定是实际情况。
注意只有遇到 R 操作才会使年份的计数+13.3 输出格式
输对于每个 T 的记录输出一行,如果此次计划旅行令国王满意,则输出 Y,否则输出 X。
3.4 样例输入
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
3.5 样例输出
Y
N
Y
3 .6 数据范围与约定
对于 30%的数据,保证 n<=1000 ,m<=3000。
另 30%的数据满足没有发生国王的交替。
NOIP 模拟试题 #5
8
对于 100%的数据,保证 n,m<=3000000<=v,x,y,st,ed<n,0<=t<m。

按秩合并并查集裸题,不进行路径合并,对于每条边有一个时间戳,合并时把小的合到大的上去(比较快)

int find(int x,int t) //按秩合并查询代码
{
    while(x!=fat[x]&&tme[x]<=t) x=fat[x];
    return x;
}

别用cin,比较慢

#include <iostream>
#include <cstdio>
using namespace std;
int fat[310000],tme[310000],size[310000];
int find(int x,int t) 
{
    while(x!=fat[x]&&tme[x]<=t) x=fat[x];
    return x;
}
int main()
{
    int n,m,c=0;
    int ti=0;
    scanf("%d%d",&n,&m);
    bool flag=0;
    for(int i=0;i<n;i++)
     fat[i]=i,size[i]=1;     

    for(int i=1;i<=m;i++)
     {
        char w[3];
        scanf("%s",w);
        if(w[0]=='K')
         scanf("%d",&c),flag=0;
        if(w[0]=='R')
         {
            ti++;
            int x,y;
            scanf("%d%d",&x,&y);
            if(flag) 
            {
                x=(x+c)%n;
                y=(y+c)%n;
                       }
            int f1=find(x,ti),f2=find(y,ti);

            if(f1==f2) continue;
            if(size[f1]>size[f2])
             fat[f2]=f1,tme[f2]=ti,size[f1]+=size[f2];
            else
             fat[f1]=f2,tme[f1]=ti,size[f2]+=size[f1];

         }
        if(w[0]=='T')
        {
            int x,y,q;
            scanf("%d%d%d",&x,&y,&q);
            if((find(x,ti-q)!=find(y,ti-q))&&(find(x,ti)==find(y,ti)))
             {
                flag=0;
                printf("Y\n");
             }
            else
             {
                flag=1;
                printf("N\n");
             }
        }
     }
}
引用中提到了一个名为history.js的插件,可以兼容各大浏览器,并且在使用Hash值进行兼容时,需要判断是否是兼容模式。而引用中提到的带有打乱数据的重复K折验证是一种用于评估模型的方法,特别适用于数据相对较少的情况。具体做法是多次使用K折验证,在每次将数据划分为K个分区之前都先将数据打乱,最终得到每次K折验证的分数的平均值。这种方法的计算代价较高,需要训练和评估多个模型。至于引用中提到的向量、序列和图像数据的存储和处理方法,可以根据数据的特点选择不同的张量形状和相应的处理层进行处理。根据提供的引用内容,无法确定具体的history.history是指什么。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [浏览器history.js](https://download.csdn.net/download/yangxuecjt/10548795)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [《python深度学习》学习笔记](https://blog.csdn.net/Chloris_/article/details/116177664)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值