1. 什么类型的题目需要反向建图 ?
通过做题发现,对于要求编号小的靠前输出这类题需要反向建图(菜鸡做题少...未完待续
2.为什么要反向建图 ?
上面已经说过什么类型的题目需要反向建图。
比如说:有1 , 2 , 3 共 3 个数,要求 3 在 1 前面输出(对 2 没有要求
如果没有反向建图的话,会造成输出 2 3 1这样的错解( 实际上应该输出 3 1 2 ...
3.详细步骤
对于给定顺序:
6 -> 4 -> 7 ( 对于这一行,要求先输出6,在输出4,最后输出 7
3 -> 9 ->2 ( 同上。。。
5 ->1 ->8 (同上。。。
这样我们反向建图,每次都处理(比较)入度为 0 的点
6 <- 4 <- 7
3 <- 9 <- 2
5 <- 1 <- 8
这样我们先比较 7 2 8 这一列( 入度为 0 嘛),大的肯定是最后输出( 要求小的先输出
因此 ans[1] = 8 ,把 8 剔除出去,与 8 相连的点的入度 -1
6 <- 4 <- 7
3 <- 9 <- 2
5 <- 1
此时入度为 0 的点有 7 2 1 ,然后再把 最大的剔除出去
因此 ans[2] = 7,与 7 相连的点的入度 -1
6 <- 4
3 <- 9 <- 2
5 <- 1
此时入度为 0 的点有 4 2 1 ,然后再把 最大的剔除出去
因此 ans[3] = 4 与 4 相连的点的入度 -1
。
。
。
反复执行上述步骤,直至处理完全部入度为 0 的点( 可能有环。。。)
最后得到 ans[1] = 8 ; ans[2] = 7 ;ans[3] = 4 ; ans[4] = 6 ;ans[5] = 2 ; ans[6] = 9 ;ans[7] = 3 ;ans[8] = 1 ; ans[9] = 5
此时,我们再反向输出,即可以得到答案
5 1 3 9 2 6 4 7 8
4.题目链接
5.结束
( 有错误的话还望多多指教 。。。
再补充一点:关于字典序最小 和 编号最小 优先输出的区别!
我们发现前一道是要求 字典序最小优先输出 即可 后面一道却是要求 编号最小优先输出!!
那么,有什么区别吗?
对于这张图,字典序最小优先输出是 1 3 4 2
BUT 编号最小优先输出是 1 4 2 3
(已经看晕了QwQ