---题面--- 题解: 考场上只想到了找点双,,,,然后不知道怎么处理奇环的问题. 我们考虑对图取补集,这样两点之间连边就代表它们可以相邻, 那么一个点合法当且仅当有至少一个大小至少为3的奇环经过了它. 观察到只会出现一棵类似树的结构 + t个相对独立的环, 因为环肯定都是独立出来的,所以可以不用管它. 因此我们先找出所有点双,然后判断这个点双内是否有奇环,用二分图染色来判断.如果有奇环,则说明这个点双内的所有点都可以出现在一个奇环上,反之则都不会出现. 所以我们只需要寻找一下点双,然后判断是…
Knights of the Round Table Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 9169   Accepted: 2960 Description Being a knight is a very attractive career: searching for the Holy Grail, saving damsels in distress, and drinking with the othe…
题目真心分析不出来.看了白书才明白,不过有点绕脑. 容易想到,把题目给的不相邻的关系,利用矩阵,反过来建图.既然是全部可行的关系,那么就应该能画出含奇数个点的环.求环即是求双连通分量:找出所有的双连通分量,只要分量中的点数是奇数,则排除“must be expelled”的可能性. 判环上的点数用二分图,这个我都想了半天= =,如果是奇数个点,明摆着多出来的一个点放到哪个集合都会与集合内的点连边(这个找三个点自己画画试试就明白了).0.1染色,本人喜欢用bfs,递归什么的其实都可以. 我自己用缩…
POJ2942 洛谷UVA1364(博主没有翻墙uva实在是太慢了) 以骑士为结点建立无向图,两个骑士间存在边表示两个骑士可以相邻(用邻接矩阵存图,初始化全为1,读入一对憎恨关系就删去一条边即可),则题意变为求图中不在任何奇环(结点数为奇数的环)中的点的数量. 一个环上的点一定属于一个双连通分量(两两都有两条路径可达) 那么什么时候双连通分量中没有奇环呢? 显然,当双连通分量是二分图的时候,图中没有奇环,因为从一个点出发回到该点一定要经过偶数条边. 即非二分图的双连通分量一定含有奇环 那么,非二…
Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 13954   Accepted: 4673 Description Being a knight is a very attractive career: searching for the Holy Grail, saving damsels in distress, and drinking with the other knights are fun things t…
由于互相憎恨的骑士不能相邻,把可以相邻的骑士连上无向边,会议要求是奇数,问题就是求不在任意一个简单奇圈上的结点个数. 如果不是二分图,一定存在一个奇圈,同一个双连通分量中其它点一定可以加入奇圈.很明显,其它点和已知的奇圈相连总是有两条点数一奇一偶的路径, 因此一定可以找到一条回路使得新的这个点加入一个奇圈. #include<bits/stdc++.h> using namespace std; #define bug(x) cout<<#x<<'='<<x…
题目来源:POJ 2942 Knights of the Round Table 题意:统计多个个骑士不能參加随意一场会议 每场会议必须至少三个人 排成一个圈 而且相邻的人不能有矛盾 题目给出若干个条件表示2个人直接有矛盾 思路:求补图  能够坐在一起 就是能够相邻的人建一条边 然后假设在一个奇圈上的都是满足的 那些不再不论什么一个奇圈的就是不满足 求出全部奇圈上的点 总数减去它就是答案 首先有2个定理 1.一个点双连通分量是二分图 你就没有奇圈 假设有奇圈  那就不是二分图  充分必要条件 所…
建补图,是两个不仇恨的骑士连边,如果有环,则可以凑成一桌和谐的打麻将 不能直接缩点,因为直接缩点求的是连通分量,点双缩点只是把环缩起来 普通缩点                                                                                               点双缩点 由图可知,左图中的缩法不符题意,而右图两个缩完后的点都满足题意 然后题中说必须要奇数个骑士参加会议,即找奇圈(有奇数个点的圈) 问题就转化成缩点后判断一个点…
点击打开链接 无向图点双联通.二分图判定 <span style="font-size:18px;">#include <cstdio> #include <stack> #include <vector> #include <algorithm> #include <cstring> using namespace std; struct Edge{ int u, v; }; const int maxn = 1…
LINK 题目大意 有一群人,其中有一些人之间有矛盾,现在要求选出一些人形成一个环,这个环要满足如下条件: 1.人数大于1 2.总人数是奇数 3.有矛盾的人不能相邻 问有多少人不能和任何人形成任何的环 思路 发现如果在原图上直接判断非常的不方便 考虑在补图上挖掘性质 补图: 补图和原图没有任何一条重边 不图和原图的所有边并集是一个完全图 即删去所有存在的边,把不存在的边加上 发现可以选出来的环在补图上一定是一个奇环 那么就可以考虑怎么找到补图中的所有奇环 性质1:包含一个奇环的点双连通分量中的每…