自强组 模拟赛
2026-10-06 19:47:33
发布于:湖北
T1 送信卒
题目信息
- 时间限制: 1s
- 空间限制: 256M
- 输入文件: msg.in
- 输出文件: msg.out
题目描述
在 的网格图中,大头兵 u 需要将长官的信件从 送到 。每个格子上可能有障碍物,有障碍物的格子用 1 表示,这些格子无法通行,其余格子用 0 表示,没有障碍物的格子可以自由通行。u 每次可以选择上下左右任意方向走一格,上下移动需要穿越河流,移动一次耗时为 秒;左右移动是在陆地行进,移动一次耗时 1 秒。
因为某些原因,u 需要保证从 到 的最短路恰好耗时 秒,幸运的是,u 可以任意选择过河交通工具,也就是说过河耗时 秒可以由 u 决定。但是 u 只能选择同种类型的过河交通工具,也就是说在这次送信任务中所有的 是统一的。
那么合适的 是多少呢?
输入格式
第一行两个正整数 。
第二行四个正整数 ,分别表示送信任务的起点和终点坐标。
接下来 行,每行 个数,描述网格图。
最后一行一个正实数 。
输出格式
输出仅一行一个实数 ,表示答案,四舍五入保留 3 位小数,评测时开启逐行比较模式以保证精度。
数据保证有解。如有多解, 应当尽可能小,最小值为 0。
样例
输入1
4 4
1 1 4 4
0 0 1 1
1 0 0 0
0 0 1 0
0 0 0 0
5.00
输出1
0.667
数据范围与提示
对于所有数据,满足 。
| 子任务编号 | 分值 | 特殊性质 |
|---|---|---|
| 1 | 30 | |
| 2 | 10 | 特殊性质A |
| 3 | 60 | 无 |
特殊性质 A:,且保证从起点到终点只有一条不重复经过同一个点的路径。
T2 BOSS 树
题目信息
- 时间限制: 1s
- 空间限制: 1024M
- 输入文件: boss.in
- 输出文件: boss.out
题目描述
A 是刺客兄弟会某个年代的传奇刺客,为了探寻 A 的传奇故事,A 的后代 a 借助 Animus 进入了 A 的记忆世界。已知 A 在他的时代刺杀了 位圣殿骑士,但是 a 目前只知道 A 第一天刺杀了圣殿骑士 1,而第 位圣殿骑士的情报必须通过刺杀圣殿骑士 来取得(保证 )。
a 的精力有限,一天最多只能在 Animus 刺杀 位圣殿骑士,并且若 ,无论 是多少,a 都不可能在同一天刺杀 ,因为 a 必须得离开 Animus 和战友们研究完 的情报才能确定 的位置。例如,圣殿骑士 3 满足 ,a 可以在第一天刺杀圣殿骑士 1,但是必须在当天结束 Animus,同战友们研究完 1 提供的情报后,才能锁定 3 的位置,在之后的任意一天都可以对 3 展开刺杀任务。
当代的圣殿骑士团依然在追杀刺客兄弟会,a 必须尽快探索完 A 的记忆帮助刺客兄弟会力挽狂澜,那么 a 最少需要多少天才能在 Animus 刺杀所有 位圣殿骑士呢?
输入格式
第一行两个整数 。
第二行 个整数,分别表示 。
输出格式
第一行一个整数 ,表示 a 至少要花费的天数。
接下来一共 行,每行第一个整数 表示第 天刺杀的圣殿骑士数量,接下来 个整数表示当天刺杀的圣殿骑士们的编号。
样例
输入1
5 2
1 1 1 2
输出1
3
1 1
2 2 3
2 4 5
数据范围与提示
对于所有数据,。
| 子任务编号 | 分值 | 其他限制 |
|---|---|---|
| 1 | 24 | |
| 2 | 26 | |
| 3 | 12 | |
| 4 | 38 | 无 |
T3 共轭树图
题目信息
- 时间限制: 1s
- 空间限制: 512M
- 输入文件: reflection.in
- 输出文件: reflection.out
题目描述
对于以 1 为根的有根树 ,保证 中每个节点的父节点编号一定大于自身的编号。将 的边编号为 ,可通过如下方式生成 的共轭树图 :
- 选择 的一个排列 ;
- 依次考虑 ;
- 删除编号为 的边,设其端点分别为 ,选择当前树中分别与 连通的编号最大的点 ,在 中连接边 。
对于树 ,总共可能生成出多少种不同共轭树图 呢?答案对 998244353 取模。
输入格式
第一行一个整数 。
接下来 行,每行两个整数 ,表示一条树边。
输出格式
一行一个整数表示答案对 998244353 取模的结果。
样例
输入1
4
1 4
2 3
3 4
输出1
2
样例解释1:令第 条输入的边编号为 。当 为 或 或 时会生成 。另外三种 会生成 。
输入2
11
1 4
2 6
3 11
4 6
5 6
6 7
7 9
8 9
9 10
10 11
输出2
4605
数据范围与提示
对于 100% 的数据: 。
| Subtask | 分值 | 限制 |
|---|---|---|
| 1 | 24 pts | |
| 2 | 16 pts | |
| 3 | 8 pts | ,所有其他结点与 1 直接相连 |
| 4 | 8 pts | ,树的形态为一条链 |
| 5 | 22 pts | |
| 6 | 22 pts | 无特殊限制 |
全部评论 3
- 置顶
有正解,谁能帮我解释一下
#include<bits/stdc++.h> #define maxn 2000005 using namespace std; int s[maxn],n,m,k,mxdep; int dep[maxn]; vector<int>e[maxn],q; priority_queue<pair<int,int> >Q; void ins() { printf("%d",q.size()); for(int x:q) printf(" %d",x); puts(""); for(int x:q) for(int y:e[x]) Q.emplace(dep[y],y); q.clear(); } void dfs(int u) { dep[u]=0; for(int v:e[u]) dfs(v),dep[u]=max(dep[u],dep[v]); dep[u]++; } int main() { scanf("%d%d",&n,&k); s[0]=1; for(int i=2,x;i<=n;i++) scanf("%d",&x),s[dep[i]=dep[x]+1]++,e[x].emplace_back(i); for(int i=n;i>=1;i--) s[i-1]+=s[i]; for(int i=1;i<=n;i++) mxdep=max(mxdep,dep[i]); int ans=0,p=0; for(int i=1,x;i<=mxdep;i++) if(ans<(x=i+(s[i]+k-1)/k)) ans=x,p=i; dfs(1); printf("%d\n",ans); q.push_back(1); ins(); for(int i=1;i<ans;i++) { int T=k; while(T&&Q.size()) T--,q.push_back(Q.top().second),Q.pop(); ins(); } }16小时前 来自 湖北
0 有人类会做T3嘛
16小时前 来自 湖北
016小时前 来自 湖北
0如果觉得被@不太好,请提醒我删掉
16小时前 来自 湖北
0可以考虑树形DP吧,将删边改为合并,新连通块的代表=两个旧中的最大值、
设 为 为根的子树合并完后以 为代表的方案数,那么将 的子节点分为在 前合并和之后合并,转移方程等我再推下(16小时前 来自 上海
0
有大佬帮我看看T2和T3的嘛,T2只有62分,后面全超时了;T3我不会写
17小时前 来自 湖北
0要不要@啊
17小时前 来自 湖北
0T2可以考虑拓扑吧
17小时前 来自 上海
0我不会啊
17小时前 来自 湖北
0


















有帮助,赞一个