由于互相憎恨的骑士不能相邻,把可以相邻的骑士连上无向边,会议要求是奇数,问题就是求不在任意一个简单奇圈上的结点个数. 如果不是二分图,一定存在一个奇圈,同一个双连通分量中其它点一定可以加入奇圈.很明显,其它点和已知的奇圈相连总是有两条点数一奇一偶的路径, 因此一定可以找到一条回路使得新的这个点加入一个奇圈. #include<bits/stdc++.h> using namespace std; #define bug(x) cout<<#x<<'='<<x…
题目真心分析不出来.看了白书才明白,不过有点绕脑. 容易想到,把题目给的不相邻的关系,利用矩阵,反过来建图.既然是全部可行的关系,那么就应该能画出含奇数个点的环.求环即是求双连通分量:找出所有的双连通分量,只要分量中的点数是奇数,则排除“must be expelled”的可能性. 判环上的点数用二分图,这个我都想了半天= =,如果是奇数个点,明摆着多出来的一个点放到哪个集合都会与集合内的点连边(这个找三个点自己画画试试就明白了).0.1染色,本人喜欢用bfs,递归什么的其实都可以. 我自己用缩…
Problem  UVALive - 3523 - Knights of the Round Table Time Limit: 4500 mSec Problem Description Input The input contains several blocks of test cases. Each case begins with a line containing two integers 1 ≤ n ≤ 1000 and 1 ≤ m ≤ 1000000. The number n…
POJ2942 洛谷UVA1364(博主没有翻墙uva实在是太慢了) 以骑士为结点建立无向图,两个骑士间存在边表示两个骑士可以相邻(用邻接矩阵存图,初始化全为1,读入一对憎恨关系就删去一条边即可),则题意变为求图中不在任何奇环(结点数为奇数的环)中的点的数量. 一个环上的点一定属于一个双连通分量(两两都有两条路径可达) 那么什么时候双连通分量中没有奇环呢? 显然,当双连通分量是二分图的时候,图中没有奇环,因为从一个点出发回到该点一定要经过偶数条边. 即非二分图的双连通分量一定含有奇环 那么,非二…
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…
题目链接 题意及题解参见lrj训练指南 #include<bits/stdc++.h> using namespace std; ; int n,m; int dfn[maxn],low[maxn],time_tag; int bccno[maxn],bcc_cnt; int iscut[maxn]; int A[maxn][maxn]; vector<int> adj[maxn]; vector<int> bcc[maxn]; int odd[maxn]; struc…
---题面--- 题解: 考场上只想到了找点双,,,,然后不知道怎么处理奇环的问题. 我们考虑对图取补集,这样两点之间连边就代表它们可以相邻, 那么一个点合法当且仅当有至少一个大小至少为3的奇环经过了它. 观察到只会出现一棵类似树的结构 + t个相对独立的环, 因为环肯定都是独立出来的,所以可以不用管它. 因此我们先找出所有点双,然后判断这个点双内是否有奇环,用二分图染色来判断.如果有奇环,则说明这个点双内的所有点都可以出现在一个奇环上,反之则都不会出现. 所以我们只需要寻找一下点双,然后判断是…
题意:给你n,m n为有多少人,m为有多少组关系,每组关系代表两人相互憎恨,问有多少个骑士不能参加任何一个会议. 白书算法指南 对于每个双联通分量,若不是二分图,就把里面的节点标记 #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <…
题面还好,就不描述了 重点说题解: 由于仇恨关系不好处理,所以可以搞补图存不仇恨关系, 如果一个桌子上面的人能坐到一起,显然他们满足能构成一个环 所以跑点双联通分量 求点双联通分量我用的是向栈中push边的方法 请注意:只向栈中push树枝边 这样每次一对父子(u,v) 如果low[v]<=dfn[u] 显然u是v所在点双联通分量的割点 所以栈中边(u,v)之前的边都pop,他们连接的点构成点双联通分量 我们找到一个点双联通分量之后,由于要求奇数个人坐一桌 所以满足存在奇环,dfs染色即可 注意…
1.一个环上的各点必定在同一个点双连通分量内: 2.如果一个点双连通分量是二分图,就不可能有奇环: 最基本的二分图中的一个环: #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<queue> #include<vector> using namespace std; ,M=; int n,m,len,num,sl,tl,cn…