题目描述
题解
考虑黑用 \(1\) 表示,白用 \(0\) 表示,那么Alice要赢,就意味着每条边 \(x\rightarrow y\) 等价于 \(clr[x]\le clr[y]\)。连边也就是 \(\le\) 的关系。
不妨编号从 \(0\) 开始,题目的染色方式则意味着 \(clr[x]\neq clr[x\bigoplus 1]\)。那么原图里有 \(x\rightarrow y\) 这样的一条边,等同于需要添加 \(x\bigoplus 1\leftarrow y\bigoplus 1\)。
需要注意,Bob 可以任意操控他能染的点。也就是说,若 \(x\) 是 Alice 负责的,\(y\) 是 Bob 负责的,并且 \(x<y\),\(x\) 和 \(y\) 之间有直接的边。那么 Alice 给 \(x\) 染完,必须不能留给 Bob 染 \(y\) 就赢的可能性。换句话说,如果是 \(x\rightarrow y\),则 Alice 必须给 \(x\) 染白色。如果是 \(x\leftarrow y\),则 Alice 必须给 \(x\) 染黑色。
换成我们图里面的语言,就是对于这样的情况,额外添加一条 \(x\) 和 \(x\bigoplus 1\) 之间的边。方向依据上面的讨论(之间的方向)而定。建完边,跑 SCC 缩点。
最后是检查工作:
- 假如存在 \(x\) 和 \(x\bigoplus 1\) 位于 tarjan 缩点后的同一个连通块,那么无论如何 Alice 都是输的。因为同一个连通块等价于必有 \(clr[x]=clr[x\bigoplus 1]\)。
- 再次强调 Bob 的控制能力。假如存在 \(x,y\) 都是 Bob 负责的,且 \(x\) 到 \(y\) 有路径,那么 Bob 可以直接使 \(clr[x]>clr[y]\),Alice 就输了。
假如到这里还没出现问题,我们断言 Alice 可以赢。因为 Alice 只要根据图的限制,把自己负责的点都染好,Bob 是没有赢的办法的.