
算法-数据结构
YxuanwKeith
这个作者很懒,什么都没留下…
展开
-
JSOI2016 独特的树叶 树的Hash判同构
JSOI2016 独特的树叶 树的Hash判同构原创 2016-05-31 22:47:46 · 3104 阅读 · 3 评论 -
CF 319E Ping-Pong 区间的并查集合并
题目大意定义区间(a,b)(a,b)能走到区间(c,d)(c,d)的条件是c<a<dc<a<d或c<b<dc<b<d。 现在有两种操作: Ord=1:Ord = 1:新加入一个区间(a,b)(a,b)(后加入的区间保证比新加入的区间长) Ord=2Ord = 2:询问从第aa个区间能否走到第bb个区间。 现在有MM个操作,对于第二个操作输出YESYES或NONO。M≤105M \leq 1原创 2016-08-22 19:02:10 · 2097 阅读 · 0 评论 -
JZOJ4559 【NOI2016模拟6.23】水平线上的肮脏交易和卑鄙勾当 转换模型后CDQ分治
题目大意现在有一个坐标轴,现在有NN个交易。对于一个交易有发生的时间tit_i和发生的位置sis_i,交易发生是瞬间的。初始时你在00处,t=0t=0,每一时你可以选择左移一个单位或右移一个单位。问经过时间TT后,一定要回到原点的情况下,交易的最小间隔是多少。N≤105N \leq 10^5 −106≤si≤106 -10^6 \leq s_i \leq 10^6解题思路我们考虑交易jj满足什么条原创 2016-09-16 23:27:51 · 971 阅读 · 0 评论 -
JZOJ4686 卡牌游戏 线段树维护贪心策略
题目大意有两个人在玩这样的一个游戏:现在有2N2N张牌,牌的大小为11到2N2N,每个人都从中拿NN张牌来进行NN轮比大小。现在你已经知道第二个人的出牌顺序,你要帮第一个人赢得经量多(你可以决定他的出牌顺序)。比大小的规则是这样的:一开始是谁牌上的数字大谁就赢。但是当游戏进行了若干轮后,你可以改变游戏规则,变为谁的牌小谁赢(只能修改一次!)。问最优策略下第一个人能赢多少轮。N≤50000N \leq原创 2016-08-15 09:35:45 · 918 阅读 · 0 评论 -
JZOJ4417 【HNOI2016模拟4.1】神奇的字符串 线段树维护信息
题目大意给定5个参数,分别为N,A,B,P,MN,A,B,P,M其中我们可以生成字符串cc中的第ii位ci=[(A∗i+B)modN≥B]c_i=[(A*i+B)\bmod N \geq B],下标为00~N−1N-1,并且这个字符串是循环的。现在给你另一个MM为的字符串SS,现在有QQ组操作,有两种:每种都给定一个pp。 1. 询问cc的第pp位开始往取MM位得到的字符串与SS有多少位不同。原创 2016-09-06 21:28:37 · 1358 阅读 · 0 评论 -
JZOJ4753【GDOI2017模拟9.4】种树 LCT维护子树信息+换根时维护Dfs序(CC MONOPLOY加强版)
题目大意给定一颗NN个节点的有根树,初始时每个叶子节点都有一个不一样的颜色。定义一个节点的代价为其走到根遇到的不同颜色种数。有MM次询问,共有三种类型: 1.将节点uu到根的路径上的所有点的颜色改成一种新的颜色。 2.将树根改为节点uu,同时将两个根之间的路径上所有点改为一种颜色。 3.查询节点uu子树里所有节点代价的平均数。N,M≤106N, M \leq 10^6 解题思路我们先考虑一个子原创 2016-09-08 19:20:01 · 2434 阅读 · 0 评论 -
51Nod 算法马拉松17 Simple KMP 链剖维护SAM的fail树
题目大意化简一下题意! 现在给你一个长度为NN的字符串,对于每个字符ii,我们要统计AnsiAns_i为前ii个字符有多少个相同的子串,并且其中一个子串一定要经过位置ii。在第ii行输出∑jj=1Ansj\sum_{j = 1}^{j}Ans_j。N≤100000N \leq 100000解题思路我们考虑先对原串建SAM,问题就变成了统计一个前缀所在节点的failfail链上有多少rightrig原创 2016-08-29 11:12:16 · 1132 阅读 · 0 评论 -
JZOJ4876. 【NOIP2016提高A组集训第10场11.8】时空传送 拓扑序判断最长路是否合法
题目大意给定一个nn个点,mm条边的有向图无环图,现在要求你删除一个点以及与它有关的边,使得图中的最长路最短。n≤4∗105n\leq4*10^5 m≤106m\leq10^6解题思路首先考虑当必须选某一条边时的最长路怎么算。假设这条边连接u,vu,v。那么我们可以先预处理出fif_i数组表示到ii点的最长路是多长和gig_i表示从ii点往后走的最长路是多长,这两个都可以通过拓扑序O(n)O(n)原创 2016-11-08 17:28:48 · 879 阅读 · 2 评论 -
Codeforces Round #397 (Div. 1 + Div. 2 combined) 题解(CF765A,CF765B,CF765C,CF765D,CF765E,CF765F)
A.Neverending competitions(Codeforces 765A)题解:直接判断坐飞机的次数是奇数还是偶数就可以了。#include <cstring>#include <cstdio>#include <algorithm>using namespace std;char h[100];int n;int main() { scanf("%d", &n);原创 2017-02-21 21:00:58 · 1211 阅读 · 0 评论 -
CodeChef March Challenge 2017 题解
CC XENTASK由于要交替选,所以要不第一个人选位置为奇数的数,第二个人选位置为偶数的数,要不第一个人选位置为偶数的数,第二个人选位置为奇数的数。取最小值即可。#include <cstring>#include <cstdio>#include <algorithm>using namespace std;int n, sum[2][2];void solve() { memset原创 2017-03-13 20:26:30 · 1358 阅读 · 0 评论 -
JZOJ4479【GDOI2016模拟4.26】游戏 线段树维护多条线段的信息
题目大意给你一颗NN个节点树,每条边都有有一个距离。每个点都有一个初始权值,为123456789123456789。现在有两种操作: Ord=1Ord = 1:给定四个整数S,T,A,BS,T,A,B。表示把SS到TT之间的点都插入一个值为A∗Dis+BA * Dis + B的权值,DisDis为这个点到S的距离(一个点可以有多个权值)。 Ord=2Ord = 2:给定两个整数S,TS,T,表示原创 2016-08-21 23:07:32 · 1120 阅读 · 0 评论 -
BZOJ4568 SCOI2016 幸运数字 倍增的思想维护线性基(线性基详解)
题目大意给你一颗NN个节点的树,每个节点都有一个权值AiA_i,现在有MM组询问,每组询问有3个数u,v,u,v,,要求你输出在树上节点uu到节点vv的路径上,每个节点的权值可以选或不选,求选出的点的权值的异或最大值。N≤2∗104N \leq 2 * 10^4 M≤2∗105M \leq 2 * 10^5 Ai≤260A_i \leq 2^{60}解题思路看到这种区间异或最大值的题,那么我们就原创 2016-07-15 22:44:35 · 2162 阅读 · 0 评论 -
JZOJ4774 【GDOI2017模拟9.10】子串 线段树合并维护SAM的fail树信息(CF 666E类似)
题目大意有NN个字符串,S1,S2...SNS_1,S_2...S_N。现有有QQ个形如(li,ri,Pi)(l_i,r_i,P_i)的询问,表示字符串PiP_i在SlS_l~SrS_r中多少个串出现过。N,Q≤5∗105N ,Q\leq 5*10^5解题思路看到这种多串匹配为问题,我们可以考虑用SAMSAM来实现。首先,我们对NN个串SiS_i建一颗TrieTrie,在TrieTrie上构SAMS原创 2016-09-10 17:26:37 · 1534 阅读 · 0 评论 -
HNOI2014 世界树 基于虚树的树形动态规划
HNOI2014 世界树 基于虚树的树形动态规划原创 2016-06-06 22:59:48 · 2294 阅读 · 5 评论 -
JZOJ4623 搬运干草堆 主席树维护贪心(加了一点图......先将就着看......)
题目大意现在有NN个正整数AiA_i,现在我们可以任意的改变其中的值,设改变后的值为A′iA_i',那么我们需要花费的代价就为|A′iA_i' - AiA_i|。问把这个序列变成单调不上升序列的最小代价。N<=105N <= 10^5 Ai<=106A_i <= 10^6解题思路这道题我们可以用贪心的思想去完成。因为题目要求代价最小,那么对于我们每一个位置i,在花费相同的时候,我们肯定让AiA_i原创 2016-07-13 16:16:29 · 1080 阅读 · 1 评论 -
BZOJ4444 SCOI2015国旗计划 根据性质优化贪心
题目大意现在给定一个大小为MM的环,顺时针编号1 M1~M,以及NN个人,每个人有一个给定的属性Li,RiL_i, R_i表示可以覆盖顺时针方向的LiL_i 到Ri R_i,现在要求选最少的人覆盖掉整个环(包括两个点之间的区间),问当第ii个人必选是,至少选多少个人。M<=109M <= 10^9 N<=105N <= 10^5解题思路首先最直观的思路就是把环拆开变成一条链,我们发现我们当起点确定原创 2016-07-30 15:53:54 · 1407 阅读 · 0 评论 -
CF 700E Cool Slogans 线段树+后缀数组贪心求解
题目大意化简成我理解的题意,跟原题有点不一样! 给你一个长度为NN的字符串SS,定义一个字符串AA比另一些字符串BiB_i”酷”,当且仅当AA中有至少两个为BiB_i的子串(可以重叠,但不可以完全重叠),并且A串的价值为BiB_i中价值的最大值加1(每个串的初始价值为11)。问SS价值最大的子串价值多少。N <= 2∗1052 * 10 ^ 5解题思路由于现在有求价值最大的子串,所以我们可以用贪心原创 2016-07-31 22:38:06 · 1928 阅读 · 0 评论 -
CF 487E Tourists(JZOJ4691 旅行) 树链剖分维护点双连通分量信息
题目大意给定一个NN个点MM条边的无向图,每个点有一个点权。现在有两种操作,第一种是修改一个点的点权,第二种是询问两点间路径上的最小点权(不能经过重复的点)。操作数为QQ。N,M,Q≤109N,M,Q \leq 10^9解题思路我们先考虑没有修改点权的情况。那么我们可以先用点双连通分量缩环,缩环后的点权为环上的最小值。而每组询问就变成了求树上两点间的最权值。这个经典问题可以用倍增后链剖来维护。但是有原创 2016-08-15 10:46:13 · 953 阅读 · 0 评论 -
CF 696E ...Wait for it... 链剖练手题
题目大意给定一颗NN个点的树,现在有MM个物品,每个物品一开始都在节点AiA_i上,权值为ii。现在有两种操作,先读入OrdOrd: Ord=1Ord = 1:再读入三个整数u,v,Limu,v,Lim表示从uu到vv这条路径上从小到大把最多LimLim个物品从树上取出,并且从小到大输出。 Ord=2Ord = 2:再读入两个数u,Valu, Val表示给在uu这棵子树的所有物品加上权值ValV原创 2016-08-18 20:02:20 · 853 阅读 · 0 评论 -
CF 671D Roads in Yusland 线段树维护代价合并的思想
题目大意给定一颗NN个节点的树,现在有MM个工人,每个工人有三个属性ui,vi,Ciu_i, v_i, C_i,表示这名工人可以维修节点uiu_i到节点viv_i的所有路径,花费为CiC_i,并且保证viv_i是uiu_i的祖先。问最少花费多少使得树上的每条边都有人维修。N,M≤300000N,M \leq 300000 Ci≤109C_i \leq 10^9解题思路这题有个特殊的性质,就是每个工原创 2016-08-19 12:47:31 · 1346 阅读 · 0 评论 -
CF 452F Permution 神奇的线段树判断
题目大意给定一个11到NN的列,问是否存在一个长度为33的子等差数列。N≤300000N \leq 300000解题思路看到这题,感觉有点无从下手,好像怎么要都要枚举两个值。 但是我们可以发现一个很神奇的性质如果对于一个位置ii,它是子等差序列中的第二项,那么如果不存在长度为33的子等差数列,那么Ai+kA_i + k和Ai−kA_i - k在位置ii前肯定是成对存在的,即如果我们把位置ii前出现原创 2016-08-18 14:50:34 · 931 阅读 · 4 评论 -
CF 702F T-shirt 奇怪的平衡树维护+超强复杂度证明
题目大意给定NN件T-shirt,每件T-shirt有一个Qi,CiQ_i,C_i表示花费和代价。现在我们的选择策略是这样的:把价值从大到小排序,价值相同的把花费从小到大排序,对于拥有的初始金钱,我们按排序后的数组从前往后尽量取T-shirt,收益就是取的T-shirt的数目。现在有MM组询问,每组询问有个初始金钱BiB_i,问你每组询问的收益。N,M≤2∗105N,M \leq 2 * 10^5原创 2016-08-16 22:55:37 · 1356 阅读 · 0 评论 -
Link Cut Tree(LCT )学习笔记
先来说一说什么是Link Cut Tree在数据结构中有一类问题叫做动态树问题(DynamicTree)(Dynamic Tree),它会要求你对一颗树进行切割和拼接,然后再在上面维护传统的数据结构能维护的值,为了完成这一类问题,就有了很多相应的算法来解决这类问题,Link Cut Tree就是其中一种比较方便实用的算法。本文讲的就是本人对LCT的一些见解。原创 2016-03-27 13:24:08 · 3138 阅读 · 5 评论