我常常胡说八道
Zskioaert1106 · · 生活·游记
前情提要:前半段是我 Day2 场上在 industry.cpp 的注释里写的,而我是真的以为
:::info[industry.cpp]
#include<bits/stdc++.h>
using namespace std;
constexpr int N=100005;
int id,n,m,fa[N],dep[N],siz[N],wc[N],top[N];
vector<int>e[N];
void dfs1(int x){
dep[x]=dep[fa[x]]+1,siz[x]=1;
for(int u:e[x]){
if(u==fa[x])continue;
fa[u]=x;
dfs1(u);
siz[x]+=siz[u];
if(siz[u]>siz[wc[x]])wc[x]=u;
}
}
void dfs2(int x){
if(!wc[x])return;
top[wc[x]]=top[x];
dfs2(wc[x]);
for(int u:e[x]){
if(u==fa[x]||u==wc[x])continue;
top[u]=u;
dfs2(u);
}
}
int lca(int x,int y){
while(top[x]!=top[y]){
if(dep[top[x]]<dep[top[y]])swap(x,y);
x=fa[top[x]];
}
return (dep[x]<dep[y])?x:y;
}
int solve1(int rt,int s,int t,bool ox,bool oy,int r){
if(s==t)return 1;
if(!(ox||oy)){
if(s==rt||t==rt)return r>1;
return r>2;
}
if(!(ox&&oy)){
if(s==rt||t==rt)return (r>1)+1;
return (r>2)+(r>1)+1;
}
if(s==rt||t==rt)return (r>1)+1<<1;
return (r>1)*4+(r>2)*2+3;
}
int solve2(int s,int t,bool ox,bool oy){
if(!(ox||oy))return 0;
if(!(ox&&oy))return 1;
return dep[s]+dep[t]-2*dep[lca(s,t)]+1;
}
/*
你在一片闷热中醒来。眼前的漆黑混沌渐渐消退后,你看到面前是暗淡的电脑,嘈杂的键盘敲击声此起彼伏,窗外的阳光透过松柏的枝桠,在桌上投下几晕光斑。
“这是哪里?”脱口而出后,旁边的人看了你一眼。
慢着……我躺下之前不是在家里吗?我难道不是一边啃着面包,一边查看今年最新的省选 Day1 的题目吗?虽然说有点头晕,但是我睡的也不晚啊,怎么跟断片了一样?你努力理着思绪。
面前的电脑上有一个 PDF 文件,此外还有打开的 CodeBlocks,不过只有三个空白文件。
你向上滑了一下 PDF,“2026 联合省选 第二试”赫然在目。
我参加了省选?我参加省选了?
举手向监考老师示意了一下,你穿过走廊来到厕所,洗了把脸以平复自己的心情。从墙上瓷砖的痕迹到厕所中的气味,这里的一切都如此真实,让你一眼就能与记忆中的学校联系起来。
打开程序回收系统,确实是你的名字没错。只是这场考试还有十分钟就要结束了。
你有些伤感,不论这份记忆是真是假,难道第一次参加省选就要无疾而终吗?
你不甘地瞪大双眸,想在最后的时间内记住题目。
你看到第一题“排列游戏”。
为什么是一道交互题?你在纷繁庞杂的【题目描述】【实现细节】【评分方式】里徘徊。时间一分一秒地流过,你终于大概明白了这道题的意思。就是说每次可以询问区间 mex,询问不能超过 O(n log n) 次,要给出一个排列,使得对于所有 n(n+1)/2 个询问,答案和原排列都一样。
你差不多想出来怎么做了。可以先二分出 0 和 1 的位置,如果 2 在这两个位置之间则无法确定具体的位置,然后这样就可以得到 n 个数的合法位置区间,然后就可以用一个优先队列贪心求合法方案了。
这本来是一个非常好写的解法,可这偏偏是交互题。你按照题目里的【测试程序方式】将好不容易搞明白的两个函数编译,在终端输入了:
g++ grader.cpp perm.cpp -o perm -std=gnu++14 -O2 -static
失败……你将调试用的 main 函数删去,再次输入:
g++ grader.cpp perm.cpp -o perm -std=gnu++14 -O2 -static
失败……你将程序的文件名从 T1.cpp 改为 perm.cpp,再次输入:
g++ grader.cpp perm.cpp -o perm -std=gnu++14 -O2 -static
为什么这个好不容易生成的 exe 打不开啊!!!你要崩溃了。还剩 5 分钟的提示也好巧不巧地响起……真是屋漏偏逢连夜雨,你马上就要绝望了,却有一个人推门而入:
“由于样例解释的更正,CCF 决定加时 15 分钟。”
你这才注意到讲台旁的黑板,上面一左一右,分别写着两个 T3 的样例更正。
“想不到竟然是我素未谋面的 T3 挽救了我。”你暗自窃喜,“我果然是世界的主角!”
你重燃斗志,赶忙在 grader.cpp 内修改,通过了大样例。
向下一滑,“星图”映入眼帘。
“星图铺就的,未必是归途。”
“但有人循着它,便不算迷路。”
一问一答之间,无数遗忘的记忆溯着漫天星轨,拥回了你的脑海。
*/
int main(){
freopen("industry.in","r",stdin);
freopen("industry.out","w",stdout);
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>id>>n;
for(int i=1,u,v;i<n;i++){
cin>>u>>v;
e[u].push_back(v),e[v].push_back(u);
}
cin>>m;
if(id==1){
int rt=0;
while(++rt)
if(e[rt].size()==n-1)break;
while(m--){
bool ox,oy;
int s,t,r;
cin>>s>>t>>ox>>oy>>r;
cout<<solve1(rt,s,t,ox,oy,r)<<'\n';
}
return 0;
}
dfs1(1);
top[1]=1;
dfs2(1);
while(m--){
bool ox,oy;
int s,t,r;
cin>>s>>t>>ox>>oy>>r;
if(s==t){
cout<<"1\n";
continue;
}
cout<<solve2(s,t,ox,oy)<<'\n';
}
return 0;
}
:::
你在一片闷热中醒来。眼前的漆黑混沌渐渐消退后,你看到面前是暗淡的电脑,嘈杂的键盘敲击声此起彼伏,窗外的阳光透过松柏的枝桠,在桌上投下几晕光斑。
“这是哪里?”脱口而出后,旁边的人看了你一眼。
慢着……我躺下之前不是在家里吗?我难道不是一边啃着面包,一边查看今年最新的省选 Day1 的题目吗?虽然说有点头晕,但是我睡的也不晚啊,怎么跟断片了一样?你努力理着思绪。
面前的电脑上有一个 PDF 文件,此外还有打开的 CodeBlocks,不过只有三个空白文件。
你向上滑了一下 PDF,“2026 联合省选 第二试”赫然在目。
我参加了省选?我参加省选了?
举手向监考老师示意了一下,你穿过走廊来到厕所,洗了把脸以平复自己的心情。从墙上瓷砖的痕迹到厕所中的气味,这里的一切都如此真实,让你一眼就能与记忆中的学校联系起来。
打开程序回收系统,确实是你的名字没错。只是这场考试还有十分钟就要结束了。
你有些伤感,不论这份记忆是真是假,难道第一次参加省选就要无疾而终吗?
你不甘地瞪大双眸,想在最后的时间内记住题目。
你看到第一题“排列游戏”。
为什么是一道交互题?你在纷繁庞杂的【题目描述】【实现细节】【评分方式】里徘徊。时间一分一秒地流过,你终于大概明白了这道题的意思。就是说每次可以询问区间
你差不多想出来怎么做了。可以先二分出
这本来是一个非常好写的解法,可这偏偏是交互题。你按照题目里的【测试程序方式】将好不容易搞明白的两个函数编译,在终端输入了:
g++ grader.cpp perm.cpp -o perm -std=gnu++14 -O2 -static
失败……你将调试用的 main 函数删去,再次输入:
g++ grader.cpp perm.cpp -o perm -std=gnu++14 -O2 -static
失败……你将程序的文件名从 T1.cpp 改为 perm.cpp,再次输入:
g++ grader.cpp perm.cpp -o perm -std=gnu++14 -O2 -static
为什么这个好不容易生成的 exe 打不开啊!!!你要崩溃了。还剩 5 分钟的提示也好巧不巧地响起……真是屋漏偏逢连夜雨,你马上就要绝望了,却有一个人推门而入:
“由于样例解释的更正,CCF 决定加时 15 分钟。”
你这才注意到讲台旁的黑板,上面一左一右,分别写着两个 T3 的样例更正。
“想不到竟然是我素未谋面的 T3 挽救了我。”你暗自窃喜,“‘我果然是世界的主角’!”
你重燃斗志,赶忙在 grader.cpp 内修改,通过了大样例。
向下一滑,“星图”映入眼帘。
“星图铺就的,未必是归途。”
“但有人循着它,便不算迷路。”
一问一答之间,无数遗忘的记忆溯着漫天星轨,拥回了你的脑海。
思绪在你的脑海中一幕幕闪过。为了消化体量惊人的记忆,你的面前仿佛出现了另一个你。“你”双手抱膝坐在你面前的桌上,透明的身躯穿过电脑,神情混杂着歉意的懊悔与莫大的希冀。
“不要用这种眼神看着我……话说这经历不是跟我完全一样吗,你到底在搞什么啊。”十余年的画面过去,你有些百无聊赖了。正在一天浓缩成 0.1 秒、白昼黑夜交替闪烁的集训时光里,透过“你”端坐机房内的眼角余光,端详着窗外一根抽出新芽的玉兰枝。
面前的“你”摇了摇头,一截分数条从脑海里的屏幕上放大。
“等等,这是我的 NOIP 成绩?”你定睛一看,上面的“181”从你印象里的“141”中剥离开来,逐渐凝固成更加真实的回忆——这意味着,你不再是被卡线的悲剧角色,而是混进省选,可以来到这里罚坐了!
两个平行世界的时间线,就从这里分别。
你饶有兴致地欣赏着后面的故事,只是有一点你很不理解:“我,或者说你,又冲不了省队,你有必要为了省选学得这么拼命吗?”
面前的“你”听到这句话,却忽然愠怒起来,将身前倾,试图抓住你的衣领,手却轻飘飘地从你的身体中穿过去。“你”一愣,眼中旋即充斥了复杂的情感,似有不甘,有怨恼,有一丝反悔。但他能做的却只是坐在虚空中,怀念地看着自己曾经的身躯,像变成了一名观众,是无力改变电影走向的。
你不再管面前的“你”,转而全神贯注地观看“你”在省选赛场上的表现。你看到“你”在 Day1 的赛场上抓耳挠腮,无能狂怒,用五个小时没能想出任何一题。接着,你看到 Day2 开始时看到 T1 可做欣喜若狂的“你”,虽然比穿越而来的你还疯狂,但熟悉的代码没有变,仍然是一份二分并贪心的
“你”的手臂在你面前挥舞。
“你”满心欢喜地宣告自己切掉了一道题,是了,
“你”哼着愉悦的歌,踏着轻快的步,抓起铅笔走出了附中的考场。你觉得虽然“你”已经有些走火入魔了,但此刻阳光明媚,思路行云,没有人能阻挡这个满面春风的少年。
你没忍心戳他,但他很快就被戳破了。
“什么?
脑海中的“你”呆呆地合上了笔记本电脑的屏幕,没有说一句话,只是拿起铅笔,向一扇房间门踉跄走去。
你有一种未知的感觉,愈发全神贯注地盯着脑海里的画面。
“你”推开门,拿起桌脚旁的一个小盒子。
这个小盒子绝不是你家里会出现的,甚至与“你”的房间也完全不搭。它由金属制成,上面不仅有各色典雅的彩漆,还刻着精致的纹路。
盒子“咔嗒”一声弹开,里面是一张白纸,上方写着龙飞凤舞的花体字。
面前的“你”也不动了,和你并排而坐,屏息凝视着脑海中的“你”拿起铅笔,用并不美观的字体签下名字。
“我自愿成为‘观棋者’,候平行世界的我前来介入,从此放弃执掌此身体,我的灵魂交由……”
后面的话语越来越玄乎,你逐渐看不懂了,记忆里也没有提及跟它有关的信息。那根普通的铅笔仿佛产生了千钧之重,落笔有光芒熠熠生辉。
一阵愈发强烈的陌生感觉占据了脑海,名为“虚无”。
你再次感受到自己的存在时,记忆画面已经消散了,只剩一个“你”还在与你对望。
“我明白了,所以你要我回来,把代码改成
“你”点了点头,眼中希望的火苗燃起。
“虽然我也不清楚你为什么这么有执念,”你毫不留情地解释,“但是现在加时马上也要结束了。我就算是 Tourist,也没法想完写完提交。”
“你”不可置信地反应了好一会,而后暴怒地站起身,扑向你的大脑,试图将“背叛者”驱逐出自己的躯体,让自己原生的灵魂重新接管。
“看来你无法违背自己的契约。”你看着张牙舞爪穿过自己身体的幽灵,“而我也可以决定接下来怎么做,这是我的自由。”
“你”停下了,不可置信地看了看自己的灵魂,它正在一点一点变淡,消逝。
转瞬间,那魂灵已经肉眼难辨了,映入眼帘的最后画面是他转为恳求的眼睛。
“很遗憾,你也太不了解别的世界的你了。”加时结束,你缓缓站起身,目光扫了一眼桌上的铅笔,“如果我知道我要来参加省选的话,我至少会准备两盒三明治、一盒金桔、一瓶果汁和几块巧克力。”
“再见啦,浪费了我十五年的陌生人。”
顺阶梯而下,耳边明明有很多欢声笑语,他是怎么把自己逼成这样的呢?
阳光洒进车窗,星图错开了归途。陌生而熟悉的世界提示着你这不是大梦一场,但现在你是你了。