poj2942 点-双联通+二分图染色】的更多相关文章

题意:有一群骑士要坐在一个圆形的桌子上,他们之间有些人相互讨厌,所以不能挨着,要求算出一次也不能坐在桌子上的人,每次会议桌子必须奇数个人,一个人不能开会 题解:可以先建一个补图,要满足题目条件我们只要找出所有奇圈(奇数个点的环),求出点-双联通分量,对于每一个单独的点-双连通分量,如果它一定是一个奇圈,那么不能够通过二分图染色,可以通过画图验证这条结论,那么我们对于所有的奇圈里的点进行染色,最后输出没有染色过的点,因为有可能会出现多次染色的点,所以不能直接每次加点数 坑点:不能用stl,tle了…
[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…
Knights of the Round Table Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 12439   Accepted: 4126 Description Being a knight is a very attractive career: searching for the Holy Grail, saving damsels in distress, and drinking with the oth…
Knights of the Round Table Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 10804   Accepted: 3553 Description Being a knight is a very attractive career: searching for the Holy Grail, saving damsels in distress, and drinking with the oth…
题目大概说要让n个骑士坐成一圈,这一圈的人数要是奇数且大于2,此外有些骑士之间有仇恨不能坐在一起,问有多少个骑士不能入座. 双连通图上任意两点间都有两条不重复点的路径,即一个环.那么,把骑士看做点,相互不仇恨的骑士间连边,能坐在一圈骑士的肯定在同一个点双连通分量上. 不过还有个条件是人数要大于2: 有这么一个结论:如果一个双连通分量存在奇圈(点数为奇数的环),那么这个双连通分量里所有点一定会包含在某一个奇圈内. 大概是因为,双连通分量里面点为奇数个显然都包含在奇圈里:而如果是偶数个,一部分就包含…
http://blog.csdn.net/lyy289065406/article/details/6756821 http://www.cnblogs.com/wuyiqi/archive/2011/10/19/2217911.html #include "stdio.h" #include "string.h" #define N 1010 int time; int n,m; bool map[N][N]; struct node { int x,y; //i…
题意:一些骑士,他们有些人之间有矛盾,现在要求选出一些骑士围成一圈,圈要满足如下条件:1.人数大于1.2.总人数为奇数.3.有仇恨的骑士不能挨着坐.问有几个骑士不能和任何人形成任何的圆圈. 思路:首先反向建立补图,然后问题转换成在图中找奇圈,圈肯定出现在双联通分量中,则求出图的双联通分量,又通过特性知道,一个双联通分量有奇圈则其中的点都可以出现在一个奇圈中.而对于奇圈的判定可以用交叉染色判断是非为二分图,二分图中肯定无奇圈,这里用tarjan算法得出割边(先将点入队),确定双联通分量的根节点,(…
LINK 题目大意 有一群人,其中有一些人之间有矛盾,现在要求选出一些人形成一个环,这个环要满足如下条件: 1.人数大于1 2.总人数是奇数 3.有矛盾的人不能相邻 问有多少人不能和任何人形成任何的环 思路 发现如果在原图上直接判断非常的不方便 考虑在补图上挖掘性质 补图: 补图和原图没有任何一条重边 不图和原图的所有边并集是一个完全图 即删去所有存在的边,把不存在的边加上 发现可以选出来的环在补图上一定是一个奇环 那么就可以考虑怎么找到补图中的所有奇环 性质1:包含一个奇环的点双连通分量中的每…
layout: post title: 训练指南 UVALive - 3523 (双联通分量 + 二分图染色) author: "luowentaoaa" catalog: true mathjax: true tags: - 双联通分量 - 二分图染色 - 图论 - 训练指南 --- Knights of the Round Table UVALive - 3523 题意 圆桌骑士.有的骑士之间是相互憎恨的,不能连坐,需要安排奇数个骑士围着桌子坐着,大于3个,求哪些骑士不可能安排到座…
点击打开链接 无向图点双联通.二分图判定 <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…
题面还好,就不描述了 重点说题解: 由于仇恨关系不好处理,所以可以搞补图存不仇恨关系, 如果一个桌子上面的人能坐到一起,显然他们满足能构成一个环 所以跑点双联通分量 求点双联通分量我用的是向栈中push边的方法 请注意:只向栈中push树枝边 这样每次一对父子(u,v) 如果low[v]<=dfn[u] 显然u是v所在点双联通分量的割点 所以栈中边(u,v)之前的边都pop,他们连接的点构成点双联通分量 我们找到一个点双联通分量之后,由于要求奇数个人坐一桌 所以满足存在奇环,dfs染色即可 注意…
首先转化条件,把无仇恨的人连边,然后转化成了求有哪些点不在任何一个奇环中. 一个奇环肯定是一个点双,所以想到处理出所有点双,但是也可能有的点双是一个偶环,有的可能是偶环和奇环混杂,不好判. 考察奇环性质.发现如果一个点双中只要存在一个奇环,那么任何一个点都会在至少一个奇环之中,这一点可以通过画图说明,也就是不管这些环是交错的还是嵌套的,通过奇偶性推算都可以说明这一点.. 于是只要看每个点双有没有奇环即可.提到奇环,联想到二分图,所以只要二分图染色一下看合不合法即可. 不过本人在这个染色的地方卡了…
题目链接 大意 给定\(N\)个点与\(M\)个关系,每个关系表示某两个点间没有直接的边相连,求不在所有奇环上的点的个数. (\(1\le N\le 1e3,1\le M\le 1e6\)) 思路 考虑到\(N\)比较小的缘故,我们不妨暴力连边. 对于现在得到的一个图,我们需要找出所有在奇环上的点. 考虑使用点双联通分量对图进行缩点,对于每个点双分量,暴力的去判断它是否是二分图. ①如果是二分图,那么显然无奇环,对该点双上的点不做修改. ②如果不是二分图,那么对于这个点双联通分量,一定会有一个奇…
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…
题目链接 考虑建立原图的补图,即如果两个骑士不互相憎恨,就在他们之间连一条无向边. 显而易见的是,如果若干个骑士在同一个点数为奇数的环上时,他们就可以在一起开会.换句话说,如果一个骑士被一个奇环包含,那么他就一定可以去开会. 想到环,我们就可以考虑无向图的双联通分量. 当我们用Tarjan算法求出无向图上的双联通分量后再来考虑这一道题时,我们就可以得出两个结论: 1.如果两个骑士分别在两个不同的双联通分量里,那么他们就不可能在一起开会. 这一个结论是很明显的.因为将每个双联通分量缩点后,新图一定…
题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1不为空,将S1栈顶元素弹出至输出序列 操作c 如果输入序列不为空,将第一个元素压入栈S2 操作d 如果栈S2不为空,将S2栈顶元素弹出至输出序列 如果一个1~n的排列P可以通过一系列操作使得输出序列为1,2,…,(n-1),n,Tom就称P是一个“可双栈排序排列”.例如(1,3,2,4)就是一个“可…
圆桌会议必须满足:奇数个人参与,相邻的不能是敌人(敌人关系是无向边). 求无论如何都不能参加会议的骑士个数.只需求哪些骑士是可以参加的. 我们求原图的补图:只要不是敌人的两个人就连边. 在补图的一个奇圈里(由奇数个点组成的环)每个点都是可以参加的.而一个奇圈一定在点双连通分量里,所以我们把原图的每个点双连通分量找出来,然后判断是否有奇圈.用到了几个引理: 非二分图至少有一个奇圈. 点双连通分量如果有奇圈,那么每个点都在某个奇圈里(不一定是同一个). 于是问题转化为对每个点双连通分量,判断它是不是…
题目链接:http://lightoj.com/volume_showproblem.php?problem=1300 边双连通分量首先dfs找出桥并标记,然后dfs交叉着色找奇圈上的点.这题只要求在奇圈上的点个数.容易得到,一个边双联通分量如果存在奇圈,那么整个分量上的点都属于某个奇圈. #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #include<alg…
https://vjudge.net/problem/UVALive-3523 题意: 有n个骑士经常举行圆桌会议,商讨大事.每次圆桌会议至少应有3个骑士参加,且相互憎恨的骑士不能坐在圆桌旁的相邻位置.如果发生意见分歧,则需要举手表决,因此参加会议的骑士数目必须是奇数. 统计有多少个骑士不可能参加任何一个会议. 思路: 把不相互憎恨的骑士之间连一条无向边. 因为是圆桌,所以骑士之间要构成一个环,相当于是一个点双连通分量的模型. 环的点的个数得是奇数,这就需要用到前面二分图染色的知识,如果是偶数,…
Luogu1155 NOIP2008 双栈排序 题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过 2个栈 S1 和 S2 ,Tom希望借助以下 44 种操作实现将输入序列升序排序. 操作 a 如果输入序列不为空,将第一个元素压入栈 S1 操作 b 如果栈 S1 不为空,将 S1 栈顶元素弹出至输出序列 操作 c 如果输入序列不为空,将第一个元素压入栈 S2 操作 d 如果栈 S2 不为空,将 S2 栈顶元素弹出至输出序列 如果一个 1-n的排列P可以通过一系列操作使得输出序列为 1,…
双栈排序 2008年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master     题目描述 Description Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1不为空,将S1栈顶元素弹出至输出序列 操作c 如果输入序列不为空,将第一个元素压入栈S2 操作d 如果栈S2不为空,将S2栈顶元素弹…
P1155 双栈排序(二分图染色) 题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1不为空,将S1栈顶元素弹出至输出序列 操作c 如果输入序列不为空,将第一个元素压入栈S2 操作d 如果栈S2不为空,将S2栈顶元素弹出至输出序列 如果一个1~n的排列P可以通过一系列操作使得输出序列为1,2,…,(n-1),n,Tom就称P是一个“可双栈排序排列”…
传送门 Description Input 第一行是一个整数 n . 第二行有 n 个用空格隔开的正整数,构成一个 1−n 的排列. Output 共一行,如果输入的排列不是"可双栈排序排列",输出数字 0 :否则输出字典序最小的操作序列,每两个操作之间用空格隔开,行尾没有空格. Sample Input 输入样例#1: 4 1 3 2 4 输入样例#2: 4 2 3 4 1 输入样例#3: 3 2 3 1 Sample Output 输出样例#1: a b a a b b a b 输…
洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 那么讲题了 很好的一道图论模型转化的题目 考虑什么情况下两个元素一定要放在不同的栈内 经过一番仔细思考+草稿模拟你会得出 当且仅当存在三元组\((i,j,k)\),其中\(i<j<k\)且\(v[k]<v[i]<v[j]\)时,\(i\)和\(j\)一定要放在两个不同的栈内 抽象理解…
题意 给你一个长为 \(n\) 的序列 \(p\) ,问是否能够通过对于两个栈进行 push, pop(print) 操作使得最后输出序列单调递增(即为 \(1 \cdots n\) ),如果无解输出 \(0\) . 每个操作有个优先级,push(1) > pop(1) > push(2) > pop(2) ,输出优先级最大的一组解. \(n \le 1000\) 题解 有兴趣可以来逛逛 我的博客. 洛谷前面大部分题解,对于后面直接模拟的思路肯定是错的,本文介绍一个基于贪心的算法(不知道…
https://www.luogu.org/problem/show?pid=P1155 题解: https://www.byvoid.com/zhs/blog/noip2008-twostack 开始读的代码来自 http://hzwer.com/5071.html 结论P: S[i],S[j]两个元素不能进入同一个栈 <=> 存在k,满足i<j<k,使得S[k]<S[i]<S[j]. 二分图染色判断两个数能不能在同一个栈里,确定了每个数应该进入的栈之后直接模拟就好了…
先放这吧,没时间写,明天再补 "明天到了" 题目链接 题意:求不在任何奇环内的点的数量. Tarjan求点双联通分量,然后再染色判断是不是二分图就好了. 只是不懂为什么Tarjan求双联通分量时要用栈保存点对,希望大佬留言帮助. #include <cstdio> #include <cstring> #include <vector> using namespace std; inline int min(int a, int b){ return…
http://www.cnblogs.com/wenruo/p/4959509.html 给一个图(不一定是连通图,无重边和自环),求练成一个长度为奇数的环最小需要加几条边,和加最少边的方案数. 很容易知道连的边数只能是0,1,2,3. 如果是二分图一定不含长度为奇数的环. 难点是如果是二分图怎么求方案数呢? 二分图染色时能求出每一个联通块.在每一个联通块中把任意两个颜色相同的点连一条边即可达到要求. 如图中红色和绿色的边就是部分可行解 代码(含注释): /*******************…
无向图的双连通分量 定义:若一张无向连通图不存在割点,则称它为"点双连通图".若一张无向连通图不存在割边,则称它为"边双连通图". 无向图图的极大点双连通子图被称为"点双连通分量",记为"\(v-DCC\)".无向图图的极大边双连通子图被称为"边双连通分量",记为"\(e-DCC\)". 没错,万能的图论连通性算法\(Tarjan\)又来了. 预备知识 时间戳 图在深度优先遍历的过程中,…
Tarjan求强连通分量 先来一波定义 强连通:有向图中A点可以到达B点,B点可以到达A点,则称为强连通 强连通分量:有向图的一个子图中,任意两个点可以相互到达,则称当前子图为图的强连通分量 强连通图: 如果在一个有向图中,每两个点都强连通,我们就叫这个图叫强连通图. (一张十分简洁的图) 如图,图中{1,2}就是一个强连通,也是这个图中的一个强连通分量 求强连通分量的算法有三种: Kosaraju算法,Tarjan算法,Gabow算法(然而我只会用Tarjan求) 这里就稍微介绍一下tarja…