题目大意:给你一张有向图,问是否存在奇圈和偶圈
解题思路:二分图染色,如果染色成功,证明没有奇圈
给出大神的传送门
染色的时候,如果下一个点已经被染了,说明已经形成了一个圈了,那怎么判断是奇圈还是偶圈
首先,该点如果和下一个点的颜色不同,那么该圈就是偶圈了,反之,如果该点与下一点的颜色相同,该圈就是奇圈了
但是存在一种情况,两个奇圈合成了一个偶圈的,比如平行四边形加上一条对角线,这张图就是奇圈和偶圈的结合了,那么现在的问题就是,怎么判断奇圈里面有偶圈了
如果两个奇圈存在公共点的话,那么这两个奇圈就可以组成一个偶圈了
证明:如果两个奇圈分别有a,b条边,两个圈存在一个公共点,令其有c条公共边,那么把他们合成一个环,环就有a + b - 2 * c条边了,可得,这是个偶圈(画个图就知道,平行四边形加上一条对角线)
#include <cstdio>
#include <cstring>
#pragma comment(linker, "