
LCA
huanghongxun
这个作者很懒,什么都没留下…
展开
-
POJ 3694 Network 边双连通分量
给出一个无向图,问每次操作连接一条边后图还有多少割边。初步判断每次连边以后缩点,树边数就是答案。 不过由于割边会在Tarjan的搜索树上,因此加边就是不断地维护搜索树。当将两个点连起来时,两点到其LCA间的边都变成非割边,可以暴力维护。#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#de原创 2016-03-18 23:41:24 · 462 阅读 · 0 评论 -
UOJ 150|NOIP 2015 Day 2|运输计划|LCA
给出N点树和M条树上简单路径,求将一条边的边权改为0后使M条路径中最长的最短,求修改后最长路径的长度。题目描述来看容易想到二分答案,当我们二分长度时,显然不需要考虑比二分的答案要短的路径,对于长的路径,我们只能修改一条边的长度,因此这条边必须在较长路径中都出现,即这些路径的路径交上的边。 考虑序列上的区间交的求法,即在两端点打标记,那么将某个区间归属于其左端点,求前缀和后若某端点的前缀和=区间数量原创 2016-07-21 12:05:03 · 1472 阅读 · 0 评论 -
CodeForces 231E|Cactus|边双联通分量|LCA
给定一个仙人掌图,多次询问某两点间的路径数。发现某两点间的路径数就等于2的路径间环的个数的幂。 因此Tarjan缩点后LCA计算路径经过的环的个数即可。#include <cstdio>#include <algorithm>#define FOR(i,j,k) for(i=j;i<=k;++i)using namespace std;typedef long long ll;const原创 2016-04-21 10:29:37 · 1512 阅读 · 0 评论 -
BZOJ 3676 UOJ 103 APIO 2014 后缀自动机 Manacher
对于所有的本质不同的回文子串,在SAM中查找对应节点,由于我们已知回文子串的右端点,因此可以在Parent树中快速定位我们要的状态。3676: [Apio2014]回文串Time Limit: 20 Sec Memory Limit: 128 MB Submit: 1487 Solved: 623 [Submit][Status][Discuss]Description考虑一个只包含小写拉丁原创 2016-04-19 09:53:36 · 731 阅读 · 0 评论 -
BZOJ 1095 ZJOI 2007 Hide 捉迷藏 动态点分治
动态点分治? 就是内存卡的很紧?用了154MB。。。 第一次写参考了PoPoQQQ大爷的代码。稍后补齐题解。。#include <queue>#include <cstdio>#include <algorithm>#define FOR(i,j,k) for(i=j;i<=k;++i)const int N = 100005, M = N * 2;using namespace st原创 2016-03-31 22:13:02 · 1082 阅读 · 0 评论 -
BZOJ 4539|HNOI 2016|树|可持久化线段树|LCA ******
待续。。#include <cstdio>#include <algorithm>using namespace std;const int N = 100005, M = N * 2;typedef long long ll;struct Seg { Seg *lc, *rc; int sz; ll sum; Seg() { lc = rc = this; sum = s原创 2016-04-24 23:58:57 · 562 阅读 · 0 评论 -
某主席树的的问题
Description给定一棵 N 个节点的树, 每个点 i 有权值 a[i] , 1 <= a[i] <= M . 有 Q 个询问, 对于询问 x,y,k , 分别输出树上从 x 到 y 的路径中, 权值小于/等于/大于 k 的点的数目.Solution恩。。权值线段树?还要判断区间,好吧上主席树咯。如果不在树上,那么查询[l,r]关于小于k的数目。我们对区间建立线段树,可持久化权值(不知道能不能原创 2016-02-13 12:40:27 · 948 阅读 · 0 评论 -
SPOJ 10707 Count on a Tree II 树上莫队
查询树点对间不同数字的个数。为什么我的程序越改越慢。。。#include <cstdio>#include <cmath>#include <algorithm>using namespace std;#define FOR(i,j,k) for(i=j;i<=k;++i)const int N = 40005, M = 100005, K = 16;int block[M];struc原创 2016-03-14 21:22:46 · 802 阅读 · 0 评论 -
BZOJ 4281 [ONTAK2015]Związek Harcerstwa Bajtockiego 树上倍增
看这题吓得我赶紧写了一遍。。。#include <cstdio>#define FOR(i,j,k) for(i=j;i<=k;++i)const int N = 1000005;int h[N], p[M], v[M], dep[N], fa[N][21], K = 20, cnt = 0;void add(int a, int b) { p[++cnt] = h[a]; v[cnt] =原创 2016-04-05 23:59:25 · 508 阅读 · 0 评论 -
BZOJ 2588/SPOJ Count on a Tree LCA+线段树
问树上点对间的第k大。 对每个点维护到根的路径上的权值情况,分别建立权值线段树,为了压缩内存利用可持久化线段树即可。#include <cstdio>#include <algorithm>using namespace std;#define FOR(i,j,k) for(i=j;i<=k;++i)const int N = 100005, M = N, K = 16;struct S原创 2016-03-14 23:34:50 · 501 阅读 · 0 评论 -
URAL 1088|Ilya Murometz|位运算|满二叉树的性质|LCA
http://acm.timus.ru/problem.aspx?space=1&num=1088 严重吐槽本题阅读理解。。。题目不幸 降临在俄国的土地上。恶魔掠走了Ilya的同伴Alyosha Popovich,并把他拴在魔石上,这样Alyosha就不能移动了。救出被囚禁的Alyosha是很有必要的,但是没人能做到。英雄Tsar被派去打仗了。Ilya Murometz对自己说:“我要一个人救出我原创 2017-10-06 19:37:55 · 487 阅读 · 0 评论