轻松的编程学习
首页
题库
学习路径
在线商城
能力地图
下载应用
登录 / 注册
菜单
第三步:有环就缩点
👁️ 0 人浏览
💬 0 人评论
❤️ 添加收藏
还是那七个点,这次
把
5 → 3
那条边加回来
,于是图里有了环:第三步:既然判出有环,就把它缩成 DAG。输出缩完的点数和边数。
提交你的答案
请登录后提交答案。
去登录
← 第二步:几轮能做完,最多要几台机器
第四步:吞吐量和它的上界 →
更多题目
让程序说出"你好"
让程序欢迎你
哪个命令能显示内容
哪里是指令,哪里是结果
让程序说出你的名字
这个程序会显示什么
代码编辑器
语言:
python3
c11
cpp17
Ctrl
+
Enter
运行
👩🏫 AI
▶ 运行代码
重置代码
打印代码
G = [(0, 1), (0, 2), (1, 3), (2, 3), (3, 4), (4, 5), (5, 3), (4, 6)] N = 7 def build(edges): g = {u: [] for u in range(N)} for a, b in edges: g[a].append(b) for u in g: g[u].sort() return g def kosaraju(edges, second_reversed=True): g = build(edges) rg = build([(b, a) for a, b in edges]) seen, order = set(), [] for s in range(N): if s in seen: continue st = [(s, iter(g[s]))] seen.add(s) while st: u, it = st[-1] for v in it: if v not in seen: seen.add(v) st.append((v, iter(g[v]))) break else: order.append(u) st.pop() second = rg if second_reversed else g seen2, groups = set(), [] for s in reversed(order): if s in seen2: continue st, grp = [s], [] seen2.add(s) while st: u = st.pop() grp.append(u) for v in second[u]: if v not in seen2: seen2.add(v) st.append(v) groups.append(sorted(grp)) return sorted(groups) gs = kosaraju(G) comp = {} for i, grp in enumerate(gs): for u in grp: comp[u] = i def condense(edges): # TODO: 两头分量不同的边,换成 (comp[a], comp[b]),去重后排序返回 return [] ce = condense(G) print(str(len(gs)) + "/" + str(len(ce)))
本次输入:
输出:
👩🏫
AI
请登录后使用 AI 老师
×
登录后可获得解题思路、提示与错误分析。
去登录
关闭
🎉
恭喜你,回答正确!
系统判定:正确
我知道了
💬 题目评论
提交
全部评论
全部评论