Codeforce 547 D. Mike and Fish(欧拉回路 + 思维 + 构造)
题目大意:二维平面上有 n 个点,对这 n 个点进行黑白染色,使得每行每列都满足 黑色的点和白色的点的个数的差值 小于等于 1. 按行列连边构成一张二分图,X部为 x 坐标, Y部为 y 坐标,一个点的坐标为 (x,y),则连一条从 x 到 y 的边。 问题转化为对边进行染色,使得任意一个点所连的边中,黑色和白色的差值的绝对值不超过 1。 每一个点具有偶数度是无向图具有欧拉回路的充分必要条件,若在二分图上满足这个重复必要条件,则可以在这个二分图上构造一条欧拉回路,每条(x,y)边作为入边时染成黑色,作为出边时染成白色。 这样构造一定满足条件,每一个节点连出去的边一定有一半被染成黑色,一半被染成白色。 对于二分图上奇度数的节点,分别在 X 部和 Y部 构造一个虚点,将它们分别连一条边到虚点上,使得最后可以构造欧拉回路。 可以观察到 X 部奇度数的点的个数的奇偶性,和Y部的相同,使用归纳法证明: 当只有一条边时:显然成立,X 部和 Y 部各有一个节点具有奇度数。 假设二分图有 n 条边时,结论也成立。 当 n = n + 1 时,新加的边必然使得X部和Y部的 奇度数的点的个数的奇偶性同时改变 因此可以证得两边具有奇度数的点的个数的奇偶性一定相同,基于这个性质,为 X,Y分别构建一个虚点,奇度数的点向虚点连边,最后一定能构造出一个具有欧拉回路的二分图。 关于实现: 构造欧拉回路使用