摘要:
思路:首先将hate和friend建边求其次2-SAT问题,判断是否能有解,没解就输出-1,否则用二分枚举最大的长度,将两个barn的距离小于mid的看做是矛盾,然后建边,求2-SAT问题。找出最优解。#include#include#include#include#include#include#define Maxn 3010#define Maxm 1000000using namespace std;int dfn[Maxn],low[Maxn],vi[Maxn],head[Maxn],e,n,m,lab,top,Stack[Maxn],num,id[Maxn],A,B,ss;stru 阅读全文
摘要:
思路:将每个点拆分为两个点 a与a',a表示为1,a'表示为0。那么条件给的每个边自然就会存在矛盾,然后根据2-SAT建边就行了。#include#include#include#include#include#include#define Maxn 3010#define Maxm 1000000using namespace std;int dfn[Maxn],low[Maxn],vi[Maxn],head[Maxn],e,n,m,lab,top,Stack[Maxn],num,id[Maxn];struct Edge{ int u,v,next,l;}edge[Maxm] 阅读全文
摘要:
思路:二分枚举能开的门的数量,将每次枚举转换成2-SAT问题。这里存在的矛盾是假设有门上a,b两个锁,a锁对应于1号钥匙,而一号钥匙的配对是2号钥匙,b锁对应于3号钥匙,3号的配对是4号钥匙。那么2号和4号就不能同时被选,否则有a,b锁的门就开不了。#include#include#include#include#include#define Maxn 3010#define Maxm 1000000using namespace std;int dfn[Maxn],low[Maxn],vi[Maxn],head[Maxn],f[Maxn],e,n,m,lab,top,Stack[Maxn], 阅读全文
摘要:
#include #include #include #define Maxn 120010#define Maxm 210000#define LL int#define inf 100000000#define Abs(a) (a)>0?(a):(-a)using namespace std;struct Edge{ int from,to,next; LL val;}edge[Maxm];const double eps=1e-9;LL value[Maxn];int head[Maxn],work[Maxn],dis[Maxn],q[Maxn],e,vi[Maxn];voi... 阅读全文