摘要: 中文题就不解释了。简单LCA,就是求第一个点到LCA的距离,在判断第二个点是不是LCA,不是答案再加一就可。至于求距离的话直接利用倍增法的parent数组拆成二进制复杂度为logn。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #define MP(a, b) make_pair(a, b) 13 #define PB(a) push_ba... 阅读全文
posted @ 2014-01-22 15:46 张小豪 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 题意:给你一个树,有若干个询问,然后让你统计每个结点在询问中做了几次LCA。按照结点顺序输出。思路:这也是简单的LCA题目,我用的是倍增法。每次查询在相应结点标记上++,最后输出即可。这道题的输入处理比较烦,而且第一个输入的结点并不是根节点。这要注意一下代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #define MP(a, b) make_pair(a, b)1... 阅读全文
posted @ 2014-01-22 14:06 张小豪 阅读(474) 评论(0) 推荐(0) 编辑
摘要: 题意:现实给你一棵树然后给你树上的n-1条边,接着给你一对顶点,然后让你求这对顶点的LCA。思路:由于刚刚学习LCA所以找了这一道最最水的LCA题目来做发现用复杂度较高的算法也能过,就是先遍历求出每个结点的父亲和深度,然后再将深度深的向上走,一直走到两个结点在同一高度上。再两个节点一起往上走,直到走到一个节点那么这个节点即为那两个节点的LCA。暴力法代码如下: 1 //LCA 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 ... 阅读全文
posted @ 2014-01-22 12:41 张小豪 阅读(1220) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一些变量告诉你他们之间的表达式包括其中的and or xor 然后让你计算是不是有满足的解。思路:典型的2—SAT问题,首先我是把所有的逻辑表达式化简成->表示然后再a->b之间建立一条边。接着套模版就OK了。代码如下: 1 //2014-01-21-14.47 2 //2-SAT 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #define MP(a, b) make_pair(a, b... 阅读全文
posted @ 2014-01-22 12:35 张小豪 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 题意:有若干对夫妇参加婚礼。所有人坐在一张长桌子上妻子和丈夫必须坐在对面,然后给你若干个关系a,b 表示a,b不能做在同一边。问你是否能安排座位,若行输出方案的任意一种。思路:标准的2-sat的题,套以下lrj的模版然后再判断一下是否有解。代码如下: 1 //2-SAT 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #define MP(a, b) make_pair(a, b)12 #define PB(a) push_... 阅读全文
posted @ 2014-01-22 12:30 张小豪 阅读(225) 评论(0) 推荐(0) 编辑