【poj2942】 Knights of the Round Table】的更多相关文章

http://poj.org/problem?id=2942 (题目链接) 题意 有n个骑士要去参加圆桌会议,他们将围成一圈,想要他们不打架,当且仅当参加圆桌会议的骑士数为奇数并且相邻的两个骑士不互相憎恨.现在给出m条骑士之间两两憎恨的关系,问有多少骑士无论在何种情况下都不能参加圆桌会议. Solution 思路到是很简单,先构出原图的补图,补图中每条边代表这两个骑士可以相邻.那么很显然,如果某一个骑士处于任意一个奇环中,那么他就可以参加会议. 这个问题该怎么处理呢?我们用Tarjan求出点-双…
题目链接 大意 给定\(N\)个点与\(M\)个关系,每个关系表示某两个点间没有直接的边相连,求不在所有奇环上的点的个数. (\(1\le N\le 1e3,1\le M\le 1e6\)) 思路 考虑到\(N\)比较小的缘故,我们不妨暴力连边. 对于现在得到的一个图,我们需要找出所有在奇环上的点. 考虑使用点双联通分量对图进行缩点,对于每个点双分量,暴力的去判断它是否是二分图. ①如果是二分图,那么显然无奇环,对该点双上的点不做修改. ②如果不是二分图,那么对于这个点双联通分量,一定会有一个奇…
Being a knight is a very attractive career: searching for the Holy Grail, saving damsels in distress, anddrinking with the other knights are fun things to do. Therefore, it is not very surprising that in recentyears the kingdom of King Arthur has exp…
[POJ 2942]Knights of the Round Table(双联通分量+染色判奇环) Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 11661   Accepted: 3824 Description Being a knight is a very attractive career: searching for the Holy Grail, saving damsels in distress, an…
[POJ2942][LA3523]Knights of the Round Table 试题描述 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 to do. Therefore, it is not very surprising that…
POJ2942 洛谷UVA1364(博主没有翻墙uva实在是太慢了) 以骑士为结点建立无向图,两个骑士间存在边表示两个骑士可以相邻(用邻接矩阵存图,初始化全为1,读入一对憎恨关系就删去一条边即可),则题意变为求图中不在任何奇环(结点数为奇数的环)中的点的数量. 一个环上的点一定属于一个双连通分量(两两都有两条路径可达) 那么什么时候双连通分量中没有奇环呢? 显然,当双连通分量是二分图的时候,图中没有奇环,因为从一个点出发回到该点一定要经过偶数条边. 即非二分图的双连通分量一定含有奇环 那么,非二…
圆桌会议必须满足:奇数个人参与,相邻的不能是敌人(敌人关系是无向边). 求无论如何都不能参加会议的骑士个数.只需求哪些骑士是可以参加的. 我们求原图的补图:只要不是敌人的两个人就连边. 在补图的一个奇圈里(由奇数个点组成的环)每个点都是可以参加的.而一个奇圈一定在点双连通分量里,所以我们把原图的每个点双连通分量找出来,然后判断是否有奇圈.用到了几个引理: 非二分图至少有一个奇圈. 点双连通分量如果有奇圈,那么每个点都在某个奇圈里(不一定是同一个). 于是问题转化为对每个点双连通分量,判断它是不是…
先放这吧,没时间写,明天再补 "明天到了" 题目链接 题意:求不在任何奇环内的点的数量. Tarjan求点双联通分量,然后再染色判断是不是二分图就好了. 只是不懂为什么Tarjan求双联通分量时要用栈保存点对,希望大佬留言帮助. #include <cstdio> #include <cstring> #include <vector> using namespace std; inline int min(int a, int b){ return…
http://poj.org/problem?id=2942 所写的tarjan练习题最难的一道. 说白了难在考得不是纯tarjan. 首先我们把仇恨关系处理成非仇恨关系的图,然后找双连通分量,在双连通分量里的点满足了任意一个人可以和两个(或以上)的人坐一起. 那么我们接下来要判断奇环. 发现性质:如果一个双连通分量有奇环,那么其中任意一点一定在某个奇环上. 也就是说,这些人拼一拼绝对能全部开会成功,我们把他们打上成功标志. 然后搜失败标志的人的个数即可. 判断奇环的方法显然二分图染色. #in…
http://poj.org/problem?id=2942 各种逗.... 翻译白书上有:看了白书和网上的标程,学习了..orz. 双连通分量就是先找出割点,然后用个栈在找出割点前维护子树,最后如果这个是割点那么子树就都是双连通分量,然后本题求的是奇圈,那么就进行黑白染色,判断是否为奇圈即可.将不是奇圈的所有双连通分量的点累计起来即可. #include <cstdio> #include <cstring> #include <cmath> #include <…