摘要: 也是一道2-sat的入门题;不过题目描述的不清楚,看了别人的题解才知道题意;和上面的那题差不多,一个模板;代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #define maxn 20010 7 using namespace std; 8 9 vectorve[maxn];10 stacks;11 int low[maxn],dfn[maxn],b[maxn],nncount,cnt;12 bool instack[maxn];13 14 void tarjin(int u)15 {16 low[u]=dfn... 阅读全文
posted @ 2013-09-05 16:38 Yours1103 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 2-SAT的入门题;网上说这个算法最好的入门教材是:伍昱的《由对称性解2-SAT问题》的ppt和赵爽的论文《2-SAT 解法浅析》;看了一下伍昱的ppt,很好理解!而这道题相对ppt里面的例子来说更加简单;代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #define maxn 2010 7 using namespace std; 8 9 vectorve[maxn];10 stacks;11 int low[maxn],dfn[maxn],b[maxn],nncount,cnt;12 bool instack[ma. 阅读全文
posted @ 2013-09-05 15:37 Yours1103 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 这是一道用tarjin求双连通分量的题;其中,不需要修的道路就是桥的数目;在图的每个极大环中,如果点的数目小于边的数目,显然这个环中含有子环,并且这个环的边数就是这个环中有冲突的边的数目;如果点的数模等于边的数目,那就没有冲突;代码: 1 #include 2 #include 3 #include 4 using namespace std; 5 #define maxn 10005 6 7 vectorg[maxn]; 8 int block[maxn],top,stack[maxn],dfn[maxn],low[maxn],index,res1,res2; 9 bool instack. 阅读全文
posted @ 2013-09-05 13:56 Yours1103 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 这是一道双联通分量的题,要用到LCA算法;听说这个算法有两种实现方式:一个是dfs+线段树或着RMQ;一个是用tarjin;我用的是tarjin;题目比较简单,就是每次加了一条边之后剩下的桥的个数;代码: 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define MAXN 100009 7 #pragma comment(linker,"/STACk:10240000,10240000") 8 9 int n,m,cnt,NE,BridgeNum; 10 int parent[M 阅读全文
posted @ 2013-09-05 11:04 Yours1103 阅读(206) 评论(0) 推荐(0) 编辑