参考

因为时间有限,算法竞赛,会用就好,后面再补充正确性证明

问题解决类型:

求解一些bool型0/1变量,要满足一些形如\(x_i=a\)\(x_j=b\)的关系。

流程

每个变量拆点为,\(x_0\)\(x_1\),分别表示值取\(0/1\)
强联通分量缩点,每个分量里面的变量值相同。如果\(x_0\)\(x_1\)在同一个强连通分量内,无解。
如果\(x_0\)能最终到达\(x_1\),所以最终\(x=1\),因为如果\(x=0\)两个都满足,矛盾。
所以选择节点拓扑序大的值即可。
发现跑Tarjan,得到强连通分量编号越小的拓扑序越大
所以选择编号小的即可。