- 博客(106)
- 资源 (2)
- 收藏
- 关注
原创 hihocoder 1247 树形XX~~
hihocoder 1247描述王胖浩有一个n个节点的树。他有特殊的能力,能将树划分成若干条链。一个有根树的树链剖分为将整棵树划分成若干条从一个点到这个点的祖先(包括本身)的链,并且这些链没有公共点。如果一条边在某条链上,即这条边的两个端点在同一个链上,那么这个边为重边,否则为轻边。一个树链剖分的代价为所有点对的路径上轻边的个数之和。这里将u,v和v,u当成同一个点
2015-11-11 22:29:22 638 1
原创 hihocoder 1243 树形DP
hihocoder1243描述王先生抢走了MX班里的妹子。为了报复,MX决定炸毁王先生的城市。城市可以看成是一棵n个结点的无根树。MX需要炸毁树上的每一条边,但是同一条边仅能被炸一次。MX可选用的轰炸操作有两种:1.选定两个结点u,v,并将从u到v的最短路径上的每一条边都炸毁。(如果路径上已经有被炸毁的边,则不能进行这次操作)2.选定一个结点u,并将
2015-11-11 22:13:49 499
原创 codeforces 592D 树链剖分
题意:给一棵树,边上有权值,有两种操作1 a b f 输出f div(a、b两点间的路径权值和) 向下取整2 a f 把第a条边的权值修改为f~~~一开始就想到是树链剖分,但是被数据范围给吓到了,开了一个long double,,但是long double卡效率啊~~结果TLE后来改为long long,特判一下如果大于1e18就直接赋值为1e18~~~避免溢出 AC
2015-11-07 22:37:38 507
原创 树上最长距离 hdu5527、cf592D
HDU5527题意:给一棵树,问从每个点出发可以到达的最远的距离~~~~~~~~~首先先弄清楚如何找出一棵树上最长的距离~~1、从root遍历一下,得到各个点到根的距离2、找出最大距离的那个点设为根,设为ROOT3、再从新根开始遍历所有点,得到各个点到新根的距离4、树上最长距离就是刚才遍历出来的最大距离~~可以联系现实想一下~~~那么对于HDU552
2015-11-06 21:10:46 622
原创 sublime text 3 c/c++(11) 以及sublimeclang配置 windows
被同学一推荐,觉得挺好玩的。可用的扩展很多,看起来很多功能都比codeblocks好~~工具-编译系统-新的编译系统输入一下即可这个配置中的runincommand可以额外运行到cmd.exe sublime 原始的控制台输入输出太不习惯了{ "cmd": ["g++", "${file}", "-o", "${file_path}/${file_base_n
2015-11-03 12:30:33 4627 3
原创 BZOJ3166 && BZOJ3261 可持久化字典树
题目类型:N个数字,任取两个数字使得他们的XOR值最大一般采用贪心+字典序解决。http://blog.csdn.net/u012915516/article/details/49534155如果涉及到区间内区任取两个数使得XOR的值最大则需要到贪心+可持久化字典树。BZOJ3166以及BZOJ3261就是涉及到区间内任选两个数的最大XOR值~~~BZOJ3261:
2015-10-31 20:05:59 739
原创 POJ 3764 树上XOR 贪心+字典树
题意:已知:给出n个结点,n-1条边(附边的长度).定义:两结点间的异或长度为两点之间所有边相异或的值.求:树中的最长异或长度.易知道先遍历出N个点的XOR值,接着就变成N个XOR里选两个使得XOR值最大~~这里直接用贪心+字典树进行求解~~将每一个XOR转换成二进制,从高往低插入到字典树查询时,每次尽量往不同的方向前进,如果这个不同方向没有的话,那只好按照
2015-10-31 16:45:42 417
原创 cf588e & bzoj3306 树上倍增
树上倍增:fa[i][j]:=结点i的第2^j父亲结点 更新方式为f[i][j]=fa[fa[i][j-1]][j-1]d[i][j]:=从结点i(包含)到第2^j父亲结点(不包含)路径上面的最值信息,更新方式为d[i][j]=d[i][j-1]+d[fa[i][j-1]][j-1]根据实际情况重新定义operator + 运算cf588E:题意:给一棵树(n个点
2015-10-31 13:07:37 813
原创 ural 1148 记忆化搜索
题意:一个堆塔游戏.这些塔是由立方体构成的.塔的高度为H(H层),塔的底部有M个立方体,上面的每层的立方体数与下一层立方体数的差为1. 现在的问题就是一共有多少个由n个立方体堆成的不同的塔,还有字典序第k大的方案.如果两个塔有一层以上的立方体数不同则两个塔就不同.此处用记忆化搜索进行求解~~~从底往上搜索~~根据题目开一个数组进行记录答案:long long dp[32767]
2015-10-20 11:08:13 492
原创 HDU5469 树分治、hash
题意:问能否在树上找到一条路径使得路径经过的点的单词可以组成提问的串~~树分治 肯定还有hash~~~sb的想法就不说了~~~这里开一个int in_pre[]、in_suf来记录是这个前缀以及这个后缀是否出现了 int型用来当时间戳~~直接进行点分治、然后对于当前点的子树要进行DFS、4次第一次找出当前子树(不包括根)、串的后缀,看看之前的子树没有前缀进行匹
2015-10-06 18:11:43 473
原创 BZOJ3784 树分治、RMQ~~
Description给定一个N个结点的树,结点用正整数1..N编号。每条边有一个正整数权值。用d(a,b)表示从结点a到结点b路边上经过边的权值。其中要求ahttp://blog.csdn.net/u012915516/article/details/48914879 和超级钢琴家一样的思路。可以先参见这道题~~跑一次树分治,可以得到不同情况下某点的
2015-10-05 17:41:19 542
原创 NOI2010...BZOJ2006 超级钢琴 贪心
Description小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐。 这架超级钢琴可以弹奏出n个音符,编号为1至n。第i个音符的美妙度为Ai,其中Ai可正可负。 一个“超级和弦”由若干个编号连续的音符组成,包含的音符个数不少于L且不多于R。我们定义超级和弦的美妙度为其包含的所有音符的美妙度之和。两个超级和弦被认为是相同的,当且
2015-10-05 16:33:48 712
原创 BZOJ 3697 树分治
Description采药人的药田是一个树状结构,每条路径上都种植着同种药材。采药人以自己对药材独到的见解,对每种药材进行了分类。大致分为两类,一种是阴性的,一种是阳性的。采药人每天都要进行采药活动。他选择的路径是很有讲究的,他认为阴阳平衡是很重要的,所以他走的一定是两种药材数目相等的路径。采药工作是很辛苦的,所以他希望他选出的路径中有一个可以作为休息站的节点(不包括起点和终点
2015-10-05 14:29:11 379
原创 POJ1741 点分治
树分治算法详看 点击打开链接算法过程:1、找出当前树的重心点root2、然后从这重心开始遍历、找出到树其他结点的距离,并且从小到大排序(距离0也要加入到里面,就是代表root这个点~~就可以求出点对满足条件的数量~~)3、然后利用单调性解出“满足条件”的个数4、但是上述求出的个数是有一些不满足的、例如有一些点对同处于root的某一个孩子树,所以要把同处于一个孩子树的点对
2015-09-26 21:35:40 329
原创 POJ1324 状态压缩+BFS
很久之前就看到这道题了~~但是困于能力的问题~~~也没想到居然要状压~~~蛇头每走一步,相邻的蛇身就会占领前一节蛇头/身所在的位置。因为蛇身只会只有4个方向可以前进,所以我们可以用0、1、2、3代表蛇身的相对前进方向。这就需要两位二进制。。由于蛇身最多7节,2int ans[21][21][16400];///ans[i][j][k]:=i,j代表舌头所在地方~~k代表
2015-09-24 22:38:45 412
原创 hihocoder 1236
题意:给出N个人的5个科目分数,给出q个询问~~,每次给你5个科目的具体分数。求一共有多少个人对应的5个科目都小于等于你的科目分数~~渣渣了~~~做法:分别单独把科目拿来看,看都有具体那些人满足条件。然后合并找出满足这五个条件的个人~~首先将单科目的人按照从小到达的顺序排序,然后进行二分查找就可以知道一共有多少个人满足条件。但是我们需要知道有那些人满足条件而不是数量
2015-09-22 22:51:34 636
原创 hdu5458 LCA+并查集+树状数组
题意:给出n个点、m条边(可能有环、重边)、q个询问~~询问1:=删除某一条边 询问2:=问路径中有多少条桥~~~桥、如果将环收缩的话,图会变成一个树。那么有多少条桥也就是问路径的大小。即deep[a]+deep[b]-a*deep[lca(a,b)].首先图是删边的,很麻烦~~所有离线逆过来处理。对于要“添加的边“先标记。利用剩下的没有动过的边跑一趟dfs序
2015-09-22 18:17:05 478
原创 2-sat建图以及刷题记录~~
A[x]NOT A[x]A[x] AND A[y]A[x] AND NOT A[y]A[x] OR A[y]A[x] OR NOT A[y]NOT (A[x] AND A[y])NOT (A[x] OR A[y])A[x] XOR A[y]NOT (A[x] XOR A[y])A[x] XOR NOT A[y] 建立有向图。若图中存在有向边i->j,
2015-09-14 17:41:01 548
原创 BZOJ1444 有趣的游戏【AC自动机、概率DP】
先对给出的字符串建立AC自动机。也是也可以说是trie图,一个状态图。 那么只要解出所有节点的概率就可以了。但是由于这些节点并没有明确的先后关系,而是构成了一个环的关系,所以只能有高斯来解出概率。 构造扩展矩阵的时候:(分为根节点1和一般节点i) 根节点出现的概率为1,所以扩展方程初始化为MAT[1][1]=MAT[1][n+1]=1 一般节点的概率需要求,所以扩展方程初始化为MAT[i
2015-08-16 21:34:28 1389
原创 可持久化线段树HDU2665、bzoj3207
http://acm.hdu.edu.cn/showproblem.php?pid=2665HDU2665..求区间K小。。可以用化分树、各种树来做。也可以用持久化线段树写。代码:#include #include #include #include#include #include #include #include #include #include #incl
2015-08-15 16:00:37 689
原创 poj2778 & hdu 2243 AC自动机+矩阵 &&BZOJ2938
AC自动机。 具体可以详看AC自动机 做这几道题需要注意一点、、如果某节点A的fail指针指向标志节点,那么这个节点A也是标志节点。如图 节点4和节点6肯定是病毒,由于节点3的fail是节点6且是病毒,导致3也是病毒。病毒的递推关系可以传递。对DNA建立好AC自动机。如果需要找出一条DNA链不包含病毒DNA,那么也就是说这条DNA链一直无法在AC自动机上面进行匹配。也就是不经过
2015-08-13 22:01:33 547
原创 【bzoj1193】[HNOI2006]马步距离
嗯嗯嗯~~~~~普及一个小知识。。。马从(x1,y1)到(x2,y2)相当于马从(abs(x1-x2),abs(y1-y2))到(0,0)。这样子就可以不怕大数了~~~这道题要大范围贪心+小范围BFS规定(abs(x1-x2)+abs(y1-y2))大于某一个数就是大范围。在大范围内,直接贪心。 while(x+y>50) { x=
2015-08-12 17:20:44 1132
原创 bzoj 1199 二分暴力
这道题的数据范围是25W...直接暴力。。。将所有点按照x排序之后。遍历所有的矩形和圆,用upper_bound和lower_bound寻找出符合x坐标的所有点,(位于区间[s,t]),然后暴力枚举所有点判断是否在当前形状内。。好黄好暴力。upper_bound和lower_bound的新用法~~#include #include #include #include#inc
2015-08-12 15:47:34 356
原创 bzoj2506 离线操作
~~~挺神奇的一道题!!!!!!!!这道题满足区间减法,所以把一个区间【L,R】询问拆为【1,R】区间的答案减去【1,L-1】区间的答案。将p分为两类,一类为p100;当p当p>100时,符合条件的数最多有101个,所以也基本是暴力~~开一个数组储存当前数出现了几次。遍历到前点i,更新数组,找出询问区间【1,i】,然后直接暴力查询k+n*p出现了多少次。#include
2015-07-17 21:51:07 495
原创 bzoj 2502 有上下限的最小流
觉得有可能是网络流~~但是题目一直说是最小次数~~~一直卡在最大流这个思维,都快忘记有最小流这个东西了~~~~建图方式:每条边设下限为1,上限为无穷大 s连接到每一个点,下限为0,上限无穷大 t连接到每一个点,下限为0,上限无穷大这样跑一个有上下限的最小流,就可以得出答案了~~~所有边都被遍历了~~~#in
2015-07-17 19:16:45 494
原创 codeforces 558c&558d&558e
558c题意:给出若干数,可对数进行操作(乘2或者除以2)。求最少的操作使得所有的数都相等。以二进制的角度看这些数和操作,目标就是使得最后的二进制相等,也就是每个位置对应的数都相等,反观操作,乘上2相当于二进制左移动而且二进制中的1的个数不会减少,而除以2相当与二进制右移但是会造成二进制中的1的个数减少。。 那么,我们找出所有数的公共前缀,从第一个不为零的数开始。 如(001010)、5(101
2015-07-15 14:01:12 1196
原创 poj3155 最大密度子图
给定一个无向图,要求它的一个子图,使得子图中边数|E|与点数|V|的比值最大。 解法一: 假设答案为k ,则要求解的问题是:选出一个合适的点集V和边集E,令(|E| - k * |V|) 取得最大值。所谓“合适”是指满足如下限制:若选择某条边,则必选择其两端点。 建图:以原图的边作为左侧顶点,权值为1;原图的点作为右侧顶点,权值为-k(相当于 支出k)。 若原图中存在边(u,v),则新图中添
2015-07-14 21:43:54 508
原创 01规划 最优比例生成树&最优比例环
可能见得最多的就是最优比例生成树,常用的解决方案就是二分枚举答案。 最优比例生成树一般求解最大值,如果求最小值那么转换成最大值的倒数即可。求最大值的检测条件是使得式子>=0。最优比例环,一般求解最小值,如果求最大值那么转换成求最小值的倒数。 求最小值的检测条件是图存在负环。bzoj 1486 最优比例环 在这道题里如果用spfa或许会tle。可用dfs式的spfa判断负环,沿着边权和减少的方向
2015-07-13 19:50:41 568
原创 codeforces 557d
题目意思:添加一些边,使得图有一个边数是奇数的环~~~根据题目的意思,添加的边数只有0、1、2、3 1、当图本身有奇数边的环的时候 输出 0 1 2、当然m==0时,输出3 n*(n-1)*(n-2)/6 3、当所有的边都没有公共点时,输出2 m*(n-2) 4、那么接下来就是输出1的情况了 2、3情况可以优先判断 1、4情况需要染色来判断#include <map>#i
2015-07-13 01:47:40 630
转载 bzoj 1696 贪心
/*其实sum和min都可以拆开的即求min( sum{|x-xi|} + sum{|y-yi|} )那么思路很清晰了,,,对于奇数。只有一个中位数,那么我们找1~n所有x的中位数和y的中位数,,这个就是它的点。。但是要注意,这个点不能和牛重合。如果重合,那么就取牛的上下左右四个点,即“没有两头牛的吃草位置是相邻的”,可以证明这是最优。。对于偶数。有2个中位数,,那么我们就要找这两个中位数中所有的可
2015-07-12 19:00:26 418
原创 poj3695&bzoj1853 容斥定理
~ps..求一个区间内有几个数和m互质,可以先求出m的质因数,求这个区间的m的质因数的倍数的总和(容斥定理),然后用区间总数减去这个数就是所要求的互质数量了~~~poj3695 题意:给出n个矩形,每次询问若干个矩阵的面积并。 在这里由于线段树太伤了,所以就不用这个方法了~~改用面积并。 遍历一次并操作,维护符合的询问即可#include <map>#include <set>#inclu
2015-06-02 00:14:34 492
原创 hdu4819 & poj2019 二维线段树
树套树~~ x线段树的每一个点都对应一个y线段树 这样就形成了二维线段树二维线段树最大的理解难点在于对点的push_up,即由右往左更新和由下往上更新这两个地方,还有就是x线段的每一个点都对应一个y线段树hdu 4819#include <map>#include <set>#include <queue>#include <stack>#include <math.h>#includ
2015-05-28 14:03:33 470
原创 bzoj1208 splay伸展树
splay伸展树主要有两种操作形式 (1)正常的二叉树插入形式 功能:a、查找 b、求最大值 c、最小值 d、求前驱 e、求后继 f、删点 g、合并splay树 (这里的删除直接利用splay树的结点下标) (2)区间形式 (插入是以区间形式插入的) 区间形式的伸展树相当于线段树,支持线段树的所有操作,并且还支持区间插入这个功能, 比如操作区间[a,b]
2015-05-25 16:26:28 1303
原创 bzoj 1895||poj3580
对于移位操作,其实就是将[y-t+1–y]区间移动到[x,y-t+1)区间前面 具体操作: 首先取出[x,y] 区间,然后再在选取的区间内取出[y-t+1,y],然后将区间移动到最左边即可,维护过程中记得push_down(),但是别维护过头了~~#include
2015-05-25 12:33:26 606
原创 bzoj 1500 splay伸展树
splay可以支持区间操作 简单一个需要注意的事项 在实现翻转的时候,切记不可以直接rev[key_value]^=1,需要调用一次update_rev(key_value),直接翻转左右孩子,首次标记的时候不能直接标记等下一次再翻转。#include <map>
2015-05-22 17:12:54 436
原创 bzoj 1189 二分+BFS+网络最大流
~~~~~~~~~~~~~~~~~题目大意:紧急疏散。有一张地图,‘.’表示人,‘D’表示门,人需要走曼哈顿距离的单位时间才1能到达门。一个门一个时刻只能通过一个人。求多长时间能疏散完毕。首先第一感觉肯定要BFS,要算出每个人到每个门的用时其次,优化题目意思,t时间,有num个人可以到达door[i],但是最多仅有t个人可以穿过这个门(每秒钟只可通过一个人),这就清晰的出现一个网络最大
2015-05-05 10:42:01 463
原创 bzoj 1091 裸半面交
枚举割边的次序,8!种可能每次割边总为新的平面贡献两个新点(也可能是旧点),两点构成的边即新边,新边距离和就是ans#include #include #include #include #include #include #include #include #include#include #include #include using namespace std
2015-05-02 13:38:54 506
原创 HDU 4270 SAM 后缀自动机
题目:给出一个串,有3种操作,操作1:在原串后面,添加一个串操作2:查询长度为len的子串或者长度小于等于len的后缀中字典序最小的操作3:删除最后的len个字符关于删除首先明确一点: 新建的点只与模板点有关系由新加入的点7产生的点8是根据点3为模板进行复制的(复制所有信息,包括位置)。那么点8是有点3控制的。可以从两个图看出,删除点7,不删除点8也是可以
2015-03-30 22:20:37 694
原创 poj 3415 SAM后缀自动机
题意:给出两个串,问这两个串的所有的子串中(重复出现的,只要是位置不同就算两个子串),长度大于等于k的公共子串有多少个。设A串构造SAM,B串去匹配A串状态再添加一个值:sum,指这个状态出现多少次了。也就是说B串里面有多少个子串可以进入这个状态。逆拓扑排序更新父亲结点。匹配过程中:注意一点,匹配过程中进入某个状态的串的长度是不固定的。每次匹配长度l
2015-03-26 21:40:46 854
Web性能权威指南 文字版
2018-02-24
HTTP权威指南
2018-02-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人