跳转至

拨号关系的补全: 补充解法

入度剥离

Codex(GPT-6)补充这个线性算法及 alternative.cpp。合法性判据及充分必要证明见主题解:只需排除长度至少为三的环。

计算所有顶点入度,把入度为零的顶点入队。反复弹出一个顶点,将其唯一后继的入度减一;后继入度变零时继续入队。最后扫描未被移除的顶点,要求每个都满足 \(a_{a_i}=i\) .全部满足输出 Y ,否则输出 N .

环上每个顶点始终至少有来自环中前驱的一条入边,所以不会被剥离。函数图中所有非环顶点构成指向环的树,沿叶到根依次都被移除。因此剩余顶点恰为全部环顶点。在它们中,\(a_{a_i}=i\) 恰好说明所在环长为一或二,算法与判据等价。

单组时间和空间均为 \(O(N)\) ;全文件时间为 \(O(T+\sum N)\) .相比时间戳遍历,本方法增加入度数组和队列,换取直接的剥离不变量;没有渐进复杂度优势。