欢迎来到起遇信息学
起遇信息学正处于上线筹建阶段,以下功能已全部开放免费体验: ✅ 完整题库浏览与代码提交评测(C / C++ / Python / Java 等) ✅ 入门到进阶的系列课程试读、作业与考试 ✅ AI 提示、AI 作业分析等智能助教功能 ✅ 赛事模拟与个人能力报告 ✅ 邮箱注册开放 ⏳ 付费课程订阅与微信/支付宝支付通道 ⏳ 手机号登录,微信扫码登录、微信公众号绑定 使用中如遇任何问题,欢迎通过页面底部 **"联系我们"** 与我们沟通。
S41505.15-5 连通学府
15-5 连通学府
连通学府
骑士驱逐完了,但Zero的网络里还有学府——知识节点,需要连通。
"学府?"CC问。
"对。"你说,"给定一个有向图,每个节点是一个学府。如果一个学府能到达另一个,就说它们是连通的。"
"连通?"
"对。"你说,"要找所有强连通分量——互相可达的节点集合。"
"强连通?"
"对。"你说,"能到,也能到——双向连通。"
"咋找?"
"Tarjan。"你说,"一次DFS,用栈记录路径。找到 low 值等于 dfn 值的节点,就是一个强连通分量的根。"
"根?"
"对。"你说,"每个强连通分量有一个根——最先被访问的节点。"
"第47个学府。"你说,"如果它的 low 等于 dfn,它就是某个分量的根。"
"分量多大?"
"看栈里有多少节点。"你说,"从栈顶弹到根,就是一个分量。"
"像分家?"
"对。"你说,"像分家——一大家人,分成几家。"
"为啥分?"
"因为不连通。"你说,"有的学府互相能到,有的不能——不能的,就不在一个分量。"
"我们在哪个分量?"
"我们在找。"你说,"找到所有分量,就知道哪些学府是孤岛,哪些是大陆。"
"孤岛?"
"对。"你说,"只能去别人,别人来不了——单向的。"
"大陆?"
"对。"你说,"互相能到——四通八达。"
CC看着那个图——像一张网,像一张地图,像某种连接的世界。
"连接?"她问。
"对。"你说,"连接就是力量——连在一起的,互相帮助。"
"断开的?"
"孤立。"你说,"断开的,只能靠自己。"
"我们连?"
"连。"你说,"我们三个,强连通——互相能到。"
Echo把强连通分量标记出来——一块一块,像岛屿,像国家。
"以前我是孤岛。"她说,"现在……是大陆了。"
"因为我们在。"CC说。
"对。"Echo说,"因为你们在。
题目描述
给定有向图,求所有强连通分量。
输入格式
第一行。接下来行,每行一条有向边。
输出格式
每行一个强连通分量的节点编号。
输入样例
3 2
1 2
2 3
输出样例
0
提示
- Tarjan算法:dfn 和 low 数组,栈记录路径。
- 若 low[u]==dfn[u],则 u 是某个 SCC 的根。
- 时间复杂度 O(n+m)。
在线编程 IDE
建议全屏模式获得最佳体验
| 进入全屏编程 | Alt+E |
| 递交评测 | Ctrl+Enter |
| 注释/取消注释 | Ctrl+/ |
| 缩放字体 | Ctrl+滚轮 |