上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 22 下一页
摘要: 裸的网络流,递归的dinic会爆栈,在第一行加一句就行了#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #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,nex 阅读全文
posted @ 2013-07-29 14:36 fangguo 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 思路:唯一一个值得一提的就是建一个0号根节点,往每个房子建一条边,权值为房子的高度乘以X。#include#include#include#include#include#define Maxn 1010#define Maxm Maxn*Maxn#define inf 100000000using namespace std;int head[Maxn],vi[Maxn],id[Maxn],in[Maxn],pre[Maxn],cnt,X,Y,Z,n,e;struct Edge{ int u,v,next,val;}edge[Maxm];struct Point{ int x,y... 阅读全文
posted @ 2013-07-28 16:47 fangguo 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 思路:将线段按开始点的升序排序,对线段尾节点进行判断,若存在交叉,那么这两条线段就不能同时在内或同时在外。这样将每条线段在内和在外看成两个状态i和i',i表示线段在内,i'表示线段在外。假使线段i和线段j相交,那么i和j是矛盾,且i'和j'是矛盾。具体见代码#include#include#include#include#include#define Maxn 2010#define Maxm Maxn*Maxnusing namespace std;int vi[Maxn],head[Maxn],dfn[Maxn],low[Maxn],e,n,lab,top, 阅读全文
posted @ 2013-07-28 15:27 fangguo 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 思路:将每对夫妻看成是对立状态,每个不正常关系都是一个矛盾,按2-SAT的方式建边。最后建一条新娘到新郎的边。具体看注释#include#include#include#include#include#define Maxn 62#define Maxm Maxn*Maxnusing namespace std;int vi[Maxn],head[Maxn],dfn[Maxn],low[Maxn],e,n,lab,top,num,id[Maxn],Stack[Maxn],in[Maxn],Hash[Maxn],col[Maxn];struct Edge{ int u,v,next;}ed... 阅读全文
posted @ 2013-07-28 13:43 fangguo 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 思路:首先将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 阅读全文
posted @ 2013-07-27 21:15 fangguo 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 思路:将每个点拆分为两个点 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] 阅读全文
posted @ 2013-07-27 19:13 fangguo 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 思路:二分枚举能开的门的数量,将每次枚举转换成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], 阅读全文
posted @ 2013-07-27 18:04 fangguo 阅读(141) 评论(0) 推荐(0) 编辑
摘要: #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... 阅读全文
posted @ 2013-07-27 10:44 fangguo 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 思路:当k为1的时候,用二分法查询包含有f个空瓶的上界r,然后更新会方便很多,直接更新区间(a,r)了。#include#include#include#include#include#define lson(x) (x>1)#define inf 1=tree[po].r) { ans+=tree[po].r-tree[po].l+1-tree[po].left; tree[po].left=tree[po].r-tree[po].l+1; tree[po].up=1; return ; } down(po); ... 阅读全文
posted @ 2013-07-26 14:18 fangguo 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 思路:把所有涉及到的点按(x+y)的奇偶分成两部分点,对所有的1*2的骨牌,都有(x+y)为偶数的建到奇数的边。求一次最大匹配,就是答案。#include#include#include#include#include#define Maxn 2010using namespace std;int match[Maxn],map[Maxn][Maxn],vi[Maxn],ny,nx,graphic[Maxn][Maxn];struct Point{int x, y;}hori[Maxn],vert[Maxn];void init(){ memset(map,0,sizeof(map));... 阅读全文
posted @ 2013-07-26 09:02 fangguo 阅读(166) 评论(0) 推荐(0) 编辑
上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 22 下一页