自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

博客停更,请到"再见,CSDN"文章中找新博客地址

博客停更,请到"再见,CSDN"文章中找新博客地址

  • 博客(29)
  • 收藏
  • 关注

原创 |poj 3261|后缀数组|二分|Milk Patterns

poj 3261还是一样的,这题是整形数字,也可以转为字符串算法做,用后缀数组,二分以后分组判定就可以了#include<cstdio>#include<cstring>#include<algorithm>#define ms(i, j) memset(i, j, sizeof i)#define FN2 "poj3261" using namespace std;const int M

2017-05-29 21:27:42 462

原创 |spoj 694|后缀数组|Distinct Substrings

spoj 694给出一个字符串,求字符串中不相同的子串个数。我们可以知道,字符串中的每个子串都是某个后缀的前缀,于是题目转化为求不相同的后缀的前缀问题。对于每一个SA[k]SA[k]开始的后缀,将会增加n−SA[k]+1n-SA[k]+1个后缀,而其中height[k]height[k]个是和前面的字符串的前缀是相同的。所以答案就是所有n−SA[k]+1−height[i]n-SA[k]+1-hei

2017-05-29 16:14:04 383

原创 |poj 1226|后缀数组|二分|Substrings

poj 1226几本上与这题一样,只不过这里还要把读入的字符串的翻转后的字符串也要连上#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#define ms(i, j) memset(i, j, sizeof i)#define FN2 "poj1226" using namespace std;con

2017-05-29 14:01:05 496

原创 |poj 3294|后缀数组|二分|Life Forms

poj 3294和这题差不多,二分后后缀数组heightheight判断,此题要输出所有的解,用个数组存下每个解在aa中的起始位置即可。不同的是,此题判断时一定要找到一个height[i]<xheight[i]<x或者循环完毕heightheight才能更新解,这样才能防止重复解出现。 (ps: vivi数组不要开大了,否则memset时容易TLE)#include<cstdio>#includ

2017-05-29 09:36:47 420

原创 |hdu 2328|后缀数组|二分|Corporate Identity

hdu 2328给出n个字符串,输出他们的最长公共子串,无解输出”IDENTITY LOST”用不同的符号连接每个字符串,然后二分公共子串的长度,在heightheight数组中看有没有连续nn个heightheight大于公共子串的长度,如果有,那么更新答案。 (此题暴力比SA快,而且poj上用SA一直TLE,Hdu上1840ms就过了)#include<cstdio>#include<cst

2017-05-28 18:54:28 658

原创 |poj 2774|后缀数组|Long Long Message

poj 2774给出两个字符串,求这两个字符串的公共子串。我们可以连接两个字符串,中间插入$\$,然后构造后缀数组,用heightheight数组解决。以abbbc和bbc为例。 因为后缀数组是字典序排的,所以排名最近的两个后缀拥有的最大公共前缀一定比不相邻的长。所以,由图可知,只要后缀ii的位置在串1的范围,后缀i−1i-1在串2的范围(反过来亦可),那么就可以用height[i]heigh

2017-05-27 22:34:11 426

原创 |算法讨论|后缀数组 学习笔记

模板及讲解 解决字符串的有力工具。 直接上代码,注释讲解(此题为uoj #35)#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#define ms(i, j) memset(i, j, sizeof i)#define FN2 "uoj35" using namespace std;const

2017-05-25 21:15:17 307

原创 |BZOJ 2763|最短路|[JLOI2011]飞行路线

BZOJ 2763分层图最短路注意:priority_queue默认排序序列是从大到小的,所以重载小于符号时要a>b 以后权值一律写w,不要用v或c!#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<queue>#define fo(i, j, k) for (i=(j);i<=(k)

2017-05-20 23:19:19 450

原创 |BZOJ 4196|树链剖分|线段树|[Noi2015]软件包管理器

BZOJ 4196树链剖分支持修改查找子树和到根的路径权值和即可解决,注意pushdown放前面注意lc,rc会爆的情况#include<cstdio>#include<cstring>#include<algorithm>#define fo(i, j, k) for (i=(j);i<=(k);i++)#define fd(i, k, j) for (i=(k);i>=(j);i--)

2017-05-20 20:43:48 388

原创 |poj 1144|割顶|Network

poj 1144直接割顶模板。注意此题卡前向星#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#define ms(i ,j) memset(i, j, sizeof i)#define rd(a) scanf("%d", &a)#define rd2(a, b) scanf("%d%d", &a,

2017-05-20 15:28:19 342

原创 |poj 1523|割顶|[HAOI2015]SPF

poj 1523 直接模板即可。 注意不一定是连通图。#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#define ms(i ,j) memset(i, j, sizeof i)#define rd(a) scanf("%d", &a)#define rd2(a, b) scanf("%d%d"

2017-05-20 15:22:13 349

原创 |BZOJ 4034|树链剖分|线段树|[HAOI2015]树上操作

BZOJ 4034树剖后线段树维护。 此题要修改子树的权,根据树剖性质子树是连续的一段,运用时间戳思想即可。注意开long long,第一次没开就WA了(痛不欲生)#include<cstdio>#include<cstring>#include<algorithm>#define fo(i, j, k) for (i=(j);i<=(k);i++)#define fd(i, k, j)

2017-05-19 20:28:22 431

原创 OI中的常用数据生成

一、随机生成一个小于等于nn的数int RAND(int n) { srand((int)time(0)); return rand()%n+1;}二、随机生成排列int t[MAXN];int mp(int n) { int i; srand((int)time(0)); fo (i, 1, n) t[i] = i; random_shuff

2017-05-19 17:55:59 1097

原创 |poj 3237|树链剖分|线段树|Tree

poj 3237树剖+线段树。 刚开始想用记录该区域被NEGATE了几次,结果发现不可行,翻别人博客发现了原来维护最大值maxvmaxv和最小值minvminv,NEGATE就是maxv=−minv,minv=maxvmaxv=-minv, minv=maxv, 正确性显然。 #include<cstdio>#include<cstring>#include<algorithm>#defin

2017-05-18 21:00:19 393

原创 |hdu 3966|树链剖分|线段树|Aragorn's Story

hdu 3966裸树剖+线段树维护,while写成if, 数组开小搞得我调试了好久。。静态查错真的不能快了#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio>#include<cstring>#include<algorithm>#define fo(i, j, k) for (i=(j);i<=(

2017-05-18 18:44:24 380

原创 |poj 2186|强连通分量|Popular Cows

poj 2186这题求所有满足被所有点能够到达的节点,那么我们可以进行缩点,缩点之后得到一个有向DAG图,统计新图的出度,如果有一个强连通分量的出度是=0的,那么输出这个强连通分量的大小,如果有多个,输出0#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<stack>#define ms

2017-05-16 19:09:12 361

原创 |算法讨论|树链剖分 学习笔记

模板及讲解 树链剖分解决树上的修改问题。 将树剖成一条条链,再用线段树、树状数组等维护#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#define fo(i, j, k) for (i=(j);i<=(k);i++)#define fd(i, k, j) for (i=(k);i>=(j);i--

2017-05-15 21:03:55 348

原创 |BZOJ 1036|树链剖分|线段树|[ZJOI2008]树的统计Count

bzoj 1036树剖+线段树。第一个树剖题,终于AC#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#define fo(i, j, k) for (i=(j);i<=(k);i++)#define fd(i, k, j) for (i=(k);i>=(j);i--)#define rd(a) sc

2017-05-15 19:53:53 371

原创 |算法讨论|无向图割点和桥 学习笔记

模板及讲解void tarjan(int u, int fa){ 初始化low, dn为时间戳; 循环u的每一个邻接点v { v没访问过 { u的孩子数+1; 继续向下dfs; 用low[v]更新low[u]; 如果v没有反向边连回u的祖先

2017-05-14 16:45:06 479

原创 |poj 1236|强连通分量|Network of Schools

poj 1236tarjan#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<stack>#define ms(i, j) memset(i, j, sizeof i)#define FN2 "poj1236" using namespace std;const int MAXN =

2017-05-14 14:55:09 333

原创 |hdu 3666|差分约束|THE MATRIX PROBLEM

hdu 3666由题意可知, L<=C(i,j)∗ai/bj<=UL <= C(i,j) * a_i/b_j <= U 可以都除以C(i,j)C(i,j), 得 L/C(i,j)<=ai/bj<=U/C(i,j)L/C(i,j) <= a_i/b_j <= U/C(i,j) 此时都是除法,不满足差分约束看两个性质 log(a/b)=log(a)−log(b)log(a/b) = log(a)

2017-05-11 20:00:22 401

原创 |hdu 3440|差分约束|House Man

hdu 3440差分约束,由于求最大差,故建立a−b<=ca-b<=c的不等式,跑最短路 h数组排序后,依次连接两个相邻的数,注意绝对值的问题ps: INF要开0x7fffffff#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<queue>#define ms(i, j) memse

2017-05-10 19:54:21 417

原创 |poj 2763|LCA, 树状数组|或者|树链剖分, 线段树|Housewife Wind

poj 2763LCA+树状数组/线段树。首先本题大致一看就是一个LCA,但是本题有操作更改某边的权,这样会使得原本的far数组变化,不难发现,更改边权后影响该边下面所有点的答案。此时可以在LCA的DFS预处理时求出DFS序列(即时间戳),找到每个点管辖的范围,修改边权相当于修改该边连接的两个点深度深的那个点所管辖的范围,此时修改可以用暴力,但是由于far数组与LCA本身查询无关,我们可以用数据结构

2017-05-09 20:12:07 655

原创 |poj 3728|LCA|The merchant

poj 3728维护6个数组 pre[i][j] i的第2^j个祖先 deep[i] i的深度 up[i][j] i到i的第2^j个祖先的最优解 down[i][j] i的第2^j个祖先到i的最优解 dmax[i][j] i到i的第2^j个祖先路径上的最大值 dmin[i][j] i到i的第2^j个祖先路径上的最小值 然后可以通过倍增维

2017-05-08 19:49:16 454

原创 |hdu 3078|LCA|Network

hdu 3078LCA,先深度深的提上来和浅的同一深度,然后继续一起提,直到相等,期间把这些路径上的点都记录下来,排序后选择即可#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#define ms(i, j) memset(i, j, sizeof i)using namespace std;const

2017-05-06 23:22:40 440

原创 |poj 1986|LCA|Distance Queries

poj1986LCA模板题#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#define ms(i, j) memset(i, j, sizeof i)using namespace std;const int MAXN = 40000 + 5, logs = 22;struct edge{

2017-05-06 21:51:22 277

原创 |hdu 2874|LCA|并查集|Connections between cities

hdu传送门近似LCA模板题,只不过这里是森林,要用一个并查集判断是否在一棵树上/* Hdu 2586 LCA*/#include<cstdio>#include<cstring>#include<algorithm>#include<vector>using namespace std;#define ms(i,j) memset(i, j, sizeof i);

2017-05-04 20:49:44 490

原创 |算法讨论|LCA 学习笔记

题目 [LCA]Hdu 2586:LCA模板题模板及讲解/* Hdu 2586 LCA*/#include<cstdio>#include<cstring>#include<algorithm>#include<vector>using namespace std;#define ms(i,j) memset(i, j, sizeof i);const int M

2017-05-04 19:33:25 409

原创 |hdu 2586|LCA|How far away ?

Hdu传送门LCA模板题/* Hdu 2586 LCA*/#include<cstdio>#include<cstring>#include<algorithm>#include<vector>using namespace std;#define ms(i,j) memset(i, j, sizeof i);const int MAXN = 40000 + 5,

2017-05-04 19:28:06 273

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除