欢迎来到起遇信息学
起遇信息学正处于上线筹建阶段,以下功能已全部开放免费体验: ✅ 完整题库浏览与代码提交评测(C / C++ / Python / Java 等) ✅ 入门到进阶的系列课程试读、作业与考试 ✅ AI 提示、AI 作业分析等智能助教功能 ✅ 赛事模拟与个人能力报告 ✅ 邮箱注册开放 ⏳ 付费课程订阅与微信/支付宝支付通道 ⏳ 手机号登录,微信扫码登录、微信公众号绑定 使用中如遇任何问题,欢迎通过页面底部 **"联系我们"** 与我们沟通。
CF1204C.Anna, Svyatoslav and Maps
Anna, Svyatoslav and Maps
题目描述
为了简洁,主角们被省略了。
给定一个有向无权图,无自环,共有 个顶点,以及图中的一条路径(该路径不一定简单),路径由 个顶点组成的序列 给出;对于每个 ,都存在一条从 到 的有向边。
定义 个顶点组成的序列 是“好”的,如果 是 的一个子序列,,,并且 是一条经过 (按顺序)的最短路径之一。
一个序列 是序列 的子序列,指的是 可以通过从 中删除若干(可能为零或全部)元素得到。显然,序列 本身是“好”的,但你的任务是找到最短的“好”子序列。
如果有多组最短的“好”子序列,输出任意一组即可。
输入格式
第一行包含一个整数 (),表示图中顶点的数量。
接下来的 行描述图的邻接矩阵:第 行的第 个字符为 表示存在一条从顶点 到顶点 的有向边,否则为 。保证图中没有自环。
接下来一行包含一个整数 (),表示路径中顶点的数量。
下一行包含 个整数 (),表示路径上的顶点序列。保证对于任意 ,都存在一条从 到 的有向边。
输出格式
第一行输出一个整数 (),表示最短“好”子序列的长度。第二行输出 个整数 (),表示该子序列中的顶点。如果有多组最短子序列,输出任意一组即可。任意两个相邻的数都应不同。
说明/提示
下面是第一个样例中的图示:

给定的路径经过顶点 。序列 是“好”的,因为它是给定路径的子序列,首尾元素分别等于路径的首尾元素,并且经过顶点 (按顺序)的最短路径是 。注意,子序列 和 都不是“好”的,因为在这两种情况下,经过这些顶点的最短路径是 。
在第三个样例中,图是完全图,因此任意两个相邻元素不同的顶点序列都对应一条长度相同的路径。
在第四个样例中,路径 和 都是经过顶点 和 的最短路径。
由 ChatGPT 4.1 翻译
样例
4
0110
0010
0001
1000
4
1 2 3 4
3
1 2 4
4
0110
0010
1001
1000
20
1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
11
1 2 4 2 4 2 4 2 4 2 4
3
011
101
110
7
1 2 3 1 3 2 1
7
1 2 3 1 3 2 1
4
0110
0001
0001
1000
3
1 2 4
2
1 4
在线编程 IDE
建议全屏模式获得最佳体验
| 进入全屏编程 | Alt+E |
| 递交评测 | Ctrl+Enter |
| 注释/取消注释 | Ctrl+/ |
| 缩放字体 | Ctrl+滚轮 |