福建省历届夏令营-排序
https://www.luogu.com.cn/problem/P1347
特殊情况很烦。
如果出现条件 \(A<A\),矛盾;然后我们每次加入一条新的边,就重新做拓扑排序,记为函数 topo()
。
如果 topo()
\(=i\),表示总进队次数为 \(i\)。
由于要唯一确定,所以如果出现某一个时刻队列长度超过 \(1\),就说明这两个点是平级的关系,就无法确定了,但你不能排除矛盾,所以先做一个标记 \(f=1\)。
如果有的点最后入度非零,那么就矛盾了;
否则,如果 \(f=1\),无法确定;否则,返回入队总次数。
当然,开始插入的点入度为 \(0\) 的个数也会影响 \(f\)。
注意每次都要备份 \(in\) 数组。
\(O(m(n+m))\)