博客园 首页 私信博主 显示目录 隐藏目录 管理 动画
上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 29 下一页
摘要: "题目链接" cpp //利用先前的根节点建树 想一下不难写。 include include // define gc() getchar() define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF: SS++) c 阅读全文
posted @ 2018-03-24 20:00 SovietPower 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 有一棵$n$个点的有根树(初始$1$为根),每个点有不同的颜色。有$m$次三种操作: 1. $x$:把$x$到根节点的路径上所有点染成一种没出现过的颜色。 2. $x\ y$:求$x$到$y$路径上出现颜色的种数。 3. $x$:在$x$的子树中选一个点,使其到根节点的路径上出现颜色种数最多。 $n,m\leq10^5$。 阅读全文
posted @ 2018-03-24 17:55 SovietPower 阅读(134) 评论(0) 推荐(0) 编辑
摘要: "题目链接" cpp //17440kb 3760ms //维护区间颜色数、最左、最右颜色即可。 // (L[]==R[])要加括号!woc才发现。 include include include // define gc() getchar() define gc() (SS==TT&&(TT=( 阅读全文
posted @ 2018-03-24 13:15 SovietPower 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 给定一张图,求一棵生成树使得其最大边权值-最小边权值最小。 $n\leq5\times10^4,\ m\leq2\times10^5$。 阅读全文
posted @ 2018-03-24 10:53 SovietPower 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 题目链接 题意: 森林,动态建边、删边,询问从$S$开始走到$T$的期望时间。走位: 每次人会随机地选一条未走过的边走,走到无路可走,再退回。这样直到终点T。走一条边、从一条边退回都花费时间$1$。 题目特点是走到一棵子树一定会全走完,且是两遍的值。画个图,可以看出这一过程是: 从$S$开始,随机走 阅读全文
posted @ 2018-03-24 07:44 SovietPower 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 题目链接 BZOJ 洛谷 详见这. 求所有点到某个点距离和最短,即求树的重心。考虑如何动态维护。 两棵子树合并后的重心一定在两棵树的重心之间那条链上,所以在合并的时候用启发式合并,每合并一个点检查$sz$大的那棵子树的重心(记为$root$)最大子树的$sz*2$是否$>n$; 若$>n$,则向$f 阅读全文
posted @ 2018-03-23 21:15 SovietPower 阅读(369) 评论(0) 推荐(0) 编辑
摘要: 题目链接 BZOJ 洛谷 \(Description\) 树上点有点权(初始为0),边有边权,每次修改一个点的点权,并询问点$x$使$\sum_idis(x,i)*A_i$最小。$dis$只计算边权。 即带修改查询树上带权重心。 \(n,q\leq 10^5\)。 \(Solution\) 依旧点分 阅读全文
posted @ 2018-03-23 15:35 SovietPower 阅读(243) 评论(0) 推荐(1) 编辑
摘要: "题目链接 BZOJ" "洛谷" 对每种颜色维护一个LCT,保存点之间的连接关系。 修改权值A[x]和所有Max[x]都要改; 修改边的颜色先枚举所有颜色,看是否在某种颜色中有边,然后断开。(枚举一遍就行啊 还以为要set什么的存边的颜色) (条件1直接用数组存233) 修改x的颜色必须先把x旋到根 阅读全文
posted @ 2018-03-23 12:34 SovietPower 阅读(129) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 答案就是C(n,m1) C(n m1,m2) C(n m1 m2,m3)...(mod p) 使用扩展Lucas求解。 一个很简单的优化就是把pi,pi^ki次方存下来,因为每次分解p都是很慢的。 注意最后p不为1要把p再存下来!(质数) COGS 洛谷上的大神写得快到飞起啊QAQ 就 阅读全文
posted @ 2018-03-22 22:58 SovietPower 阅读(221) 评论(0) 推荐(0) 编辑
摘要: "题目链接 BZOJ" "洛谷" "详见这" 很明显题目是要求去掉一条边后两边子树sz[]的乘积。 LCT维护的是链的信息,那么子树呢? 我们用s_i[x]来记录轻边连向x的子树的和(记作虚儿子),那么sum[x]更新时就是sum[lson]+sum[rson]+val[x]+s_i[x]。 现在需 阅读全文
posted @ 2018-03-22 20:57 SovietPower 阅读(140) 评论(0) 推荐(0) 编辑
摘要: [TOC] 2018.3.22 Test 时间: 7:30~11:40 得分: 80+65+20=165 总结 时间分配。。 2个月前写的都忘的差不多了。。 注意: T2合并一棵子树,这棵子树某些点的dep[x]可能会变小,于是fa[x][..]应变为0,但如果在循环里写 `&&(1 特判输出2也要 阅读全文
posted @ 2018-03-22 15:41 SovietPower 阅读(223) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 日常zz被define里没取模坑 cpp //标记下放同线段树 注意51061^2 2147483647,要开unsigned int // sz[]别忘了。。 include include include define gc() getchar() define mod (5106 阅读全文
posted @ 2018-03-21 21:05 SovietPower 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 题目链接 洛谷 SPOJ BZOJ1095(简化版) \(Description\) 给定一棵边带权的树,初始时所有点为白色。两种操作:1. 反转某点的颜色; 2. 询问树中最远的两个白色节点的距离(只有一个则为0)。 \(n\leq 10^5,\ m\leq 2\times10^5\)。 \(So 阅读全文
posted @ 2018-03-21 18:45 SovietPower 阅读(282) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 从一个点只能往后跳,即后继状态只有一个,那么拿nxt[x]做fa[x]啊!这样就成了一棵树,从每个点开始的答案是它到所在树的根节点的距离。 nxt[]的更改即动态修改树边,用LCT即可。 这样查询需要的就是 Access(x),Splay(x);return sz[x];(sz[lso 阅读全文
posted @ 2018-03-21 15:25 SovietPower 阅读(219) 评论(0) 推荐(0) 编辑
摘要: "题目链接 BZOJ" "洛谷" cpp //25884kb 11000ms //用1e6的数组记录当前路径长度的最少边数 include include include define gc() getchar() const int N=2e5+5,M=N=K) return; dis[++dis 阅读全文
posted @ 2018-03-21 12:49 SovietPower 阅读(167) 评论(0) 推荐(0) 编辑
摘要: "题目链接" "LCT(良心总结)" cpp include include include define gc() getchar() const int N=3e5+5; inline int read() { int now=0;register char c=gc(); for(;!isdi 阅读全文
posted @ 2018-03-21 11:21 SovietPower 阅读(212) 评论(1) 推荐(1) 编辑
摘要: 题目链接 洛谷 \(Description\) 二维平面中初始有$n$个点,$m$次操作:1. 在某个位置新建一个点;2. 询问当前所有点中离某位置最近的点有多远。 \(n,m\leq 3\times 10^5\)。 \(Solution\) 考虑对于两个点a,b,距离为|x[a]-x[b]|+|y 阅读全文
posted @ 2018-03-21 08:42 SovietPower 阅读(333) 评论(0) 推荐(0) 编辑
摘要: "题目链接" ~~按套路~~行列作为两部分,连边 $S row column T$。 S向代表行的元素连边cap(A[i][n])(容量上下界为上下取整),代表列的元素向T连边cap(A[n][i]),对于每个元素(i,j)由行i向列j连边cap(A[i][j]). 考虑我们建的这张图实际流量是什么 阅读全文
posted @ 2018-03-19 22:50 SovietPower 阅读(194) 评论(0) 推荐(0) 编辑
摘要: [TOC] 2018.3.18 Test 时间: 3.5h 得分: 太zz不写了(T3 60暴力分就我没看。。) "BZOJ总题目链接" "LOJ总题目链接" T1 BZOJ.4868.[六省联考2017]期末考试 "题目链接" T2 "题目链接" T3 BZOJ.4870.[六省联考2017]组合 阅读全文
posted @ 2018-03-18 13:47 SovietPower 阅读(297) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 题意: 给定一棵有n个点的树,多次询问树上距离为k的点对是否存在。k include include define gc() getchar() // define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EO 阅读全文
posted @ 2018-03-17 14:21 SovietPower 阅读(330) 评论(0) 推荐(0) 编辑
摘要: "BZOJ1468" "POJ1741" 题意: 计算树上距离v路径权值)。 这样x的答案就计算完了,将这一过程记作Solve(x)。 考虑如何计算所有点。DFS的效率是和树深有关的。计算x v时,我们选取v子树上的重心作为下次Solve()的参数。 选取重心每次都会使树的节点个数减半,因此递归深度 阅读全文
posted @ 2018-03-17 11:01 SovietPower 阅读(148) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 矩形查询可以拆成四个点的前缀和查询(树套树显然 但是空间不够) 每个操作表示为(t,x,y),t默认有序,对x分治,y用树状数组维护 初始赋值需要靠修改操作实现。 cpp //119964kb 4380ms include include include define gc() get 阅读全文
posted @ 2018-03-15 20:13 SovietPower 阅读(307) 评论(0) 推荐(1) 编辑
摘要: "题目链接" $Description$ 给定SA数组,求满足SA[]的一个原字符串(每个字符为小写字母),无解输出 1. $Solution$ 假设我们现在有suf(SA[j]),要构造suf(SA[i]) (要满足i j) 考虑后缀的比较方式,先比较第一位,再比较suf(SA[i]+1)与suf 阅读全文
posted @ 2018-03-15 18:01 SovietPower 阅读(210) 评论(0) 推荐(0) 编辑
摘要: "题目链接 BZOJ3262" "洛谷P3810" cpp / 5904kb 872ms 对于相邻x,y,z相同的元素要进行去重,并记录次数算入贡献(它们之间产生的答案是一样的,但不去重会。。) / include include include define gc() getchar() defi 阅读全文
posted @ 2018-03-15 17:35 SovietPower 阅读(180) 评论(0) 推荐(0) 编辑
摘要: "题目链接" "简易CDQ分治教程" cpp //每个操作分解为一个有序数对(t,p),即(时间,操作位置),时间默认有序,用CDQ分治处理第二维 //对于位置相同的操作 修改优先于查询 //时间是默认有序的 所以可以忽略掉对操作的影响;有影响的只是位置。(再理解) include include 阅读全文
posted @ 2018-03-15 15:34 SovietPower 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 给定两个字符串,求它们有多少个相同子串。相同串的位置不同算多个。 阅读全文
posted @ 2018-03-15 14:02 SovietPower 阅读(208) 评论(0) 推荐(0) 编辑
摘要: "题目链接" $Description$ 求两个字符串长度不小于k的公共子串对数。 $Solution$ 求出ht[]后先减去k,这样对于两个后缀A',B',它们之间的贡献为min{ht(A)}(A'到B'ht[]的最小值)。 维护一个栈,栈中ht从底到顶递减。 如果当前是求B中后缀i和前边A中子串 阅读全文
posted @ 2018-03-14 21:56 SovietPower 阅读(210) 评论(0) 推荐(0) 编辑
摘要: "题目链接 POJ2774" "SPOJ1811 LCS Longest Common Substring" 比 "后缀自动机" 慢好多(废话→_→)。 $Description$ 求两个字符串最长公共子串 $Solution$ 任何一个子串一定是某个后缀的前缀 可以将两个字符串拼在一起,中间用一个 阅读全文
posted @ 2018-03-14 19:55 SovietPower 阅读(194) 评论(0) 推荐(0) 编辑
摘要: "题目链接" $Description$ 给定一段数字序列(Ai∈[1,88]),求最长的两个子序列满足: 1.长度至少为5 2.一个子序列可以通过全部加或减同一个数来变成另一个子序列 3.两个子序列没有重叠部分 $Solution$ 求不重叠最长重复子序列: SA: 首先二分k,判断是否存在长度为 阅读全文
posted @ 2018-03-14 17:54 SovietPower 阅读(253) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 论找到一个好的教程的正确性。。 "后缀数组" 下标从1编号: cpp //299ms 2560kb include include include const int N=1e5+5; int n,sa[N],rk[N],sa2[N],tm[N],ht[N]; char s[N]; v 阅读全文
posted @ 2018-03-14 14:54 SovietPower 阅读(226) 评论(0) 推荐(0) 编辑
上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 29 下一页