随笔分类 - 图论——2-sat问题
摘要:http://poj.org/problem?id=3683题意:一个教父,在一天中要给n对新婚夫妇举行婚礼。已知每对夫妇举行婚礼的起始时间Si和终止时间Ti ,教父送祝福的时间要么在Si->Si +Di 要么在Ti - Di->Ti。问在这一天中,教父如何安排才能对着n对新人都送去祝福?思路:把每对新人的婚礼的起始时间和结束时间加减Di后分成两个对立的点,然后检查每个点(这里每个点表示一个时间段,教父在这一事件段里送上祝福)是否存在区间相交,如果i与j存在相交则i->j^1建边。然后将缩点后的图重新反向建图,利用拓扑排序,输出解。//#pragma comment(link
阅读全文
摘要:http://poj.org/problem?id=3678题意:给定n个点,这些点只能取0或1。然后给出m条边,每条边四个变量 a,b,c,op op的取值为(AND,OR,XOR) 问是否存在一组解X0,X1,....Xn-1使得每条边满足Xa op Xb = c Xa,Xb表示每条边的端点。思路:2-sat。 将每个顶点i拆分成两个点,2*i和2*i +1 分表表示0,1。然后根据已知条件建图。建图的思想不是很清晰给出过程:(1) A and B = 0 添加弧 A->!B , B->!A(2)A and B = 1 !A->A , !B->B(3)A or B
阅读全文
摘要:http://poj.org/problem?id=3207题意:一个圆盘的边沿上有n个点, 下标从0开始, 有m条线连接2m个互不相同的点, 线可以在圆盘内部,也可以在圆盘外部, 要求任意两条线不能相交. 给出m条线(内外随意), 问是否满足每条线都不相交.思路:可以将第i条线看成一对顶点,编号分别为2*i和2*i+1.那么如果线段i与j相交,就在2*i与2*j+1以及2*i+1与2*j之间连一条双向边。然后就转化到2-sat上判断是否存在可行解了。//#pragma comment(linker,"/STACK:327680000,327680000")#include
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3622题意:给定n个回合,每个回合给你两个点,每个回合只能选择一个点放置炸弹,在n个回合里选出n个点放置炸弹,炸弹的爆炸范围是一个圆形范围,半径可以控制。求满足每个炸弹爆炸的圆形区域不相交的条件下,的所有半径里面的最小半径最大值。思路:二分枚举两点之间的距离,如果存在两点距离小于等于枚举的距离时,则表示这两个点之间存在矛盾(i->j),然后根据2-sat构图方法建图,i->j' , j' -> i , j - >i' , i '->j然会通过2-s
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3062题意:中文...思路:来自伍昱的《由对称性解2-SAT问题》http://wenku.baidu.com/view/afd6c436a32d7375a41780f2.html把确定不矛盾的双方建立边,然后tarjan缩点。判断每一对夫妻是否属于不同的环,如果存在同一环里,则无解,否则有解//#pragma comment(linker,"/STACK:327680000,327680000")#include <iostream>#include <cstdio&g
阅读全文