摘要: 思路:唯一一个值得一提的就是建一个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) 编辑