算法考究在建图这点,我们举个例子来讲:
-å\81\87设æ\9c\89 ${a1,a2}$ å\92\8c ${b1,b2}$ 两对ï¼\8cå·²ç\9f¥ $a1$ å\92\8c $b2$ é\97´æ\9c\89ç\9f\9bç\9b¾ï¼\8cäº\8eæ\98¯ä¸ºäº\86æ\96¹æ¡\88è\87ªæ´½ï¼\8cç\94±äº\8e两è\80\85ä¸å¿\85é¡»é\80\89ä¸\80个ï¼\8cæ\89\80以æ\88\91们就è¦\81æ\8b\89两æ\9d¡æ\9d¡æ\9c\89å\90\91è¾¹ $(a1,b1)$ å\92\8c $(b2,a2)$ 表示é\80\89äº\86 $a1$ å\88\99å¿\85é¡»é\80\89 $b1$ ï¼\8cé\80\89äº\86 $b2$ å\88\99å¿\85é¡»é\80\89 $a2$ æ\89\8dè\83½å¤\9fè\87ªæ´½ã\80\82
+假设有 ${a1,a2}$ 和 ${b1,b2}$ 两对,已知 $a1$ 和 $b2$ 间有矛盾,于是为了方案自洽,由于两者中必须选一个,所以我们就要拉两条有向边 $(a1,b1)$ 和 $(b2,a2)$ 表示选了 $a1$ 则必须选 $b1$ ,选了 $b2$ 则必须选 $a2$ 才能够自洽。
然后通过这样子建边我们跑一遍 Tarjan SCC 判断是否有一个集合中的两个元素在同一个 SCC 中,若有则输出不可能,否则输出方案。构造方案只需要把几个不矛盾的 SCC 拼起来就好了。