Poj/Hdu
NotFound1
这个作者很懒,什么都没留下…
展开
-
|poj 3264|RMQ|Balanced Lineup
poj 3264RMQ模板题。#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define ms(i, j) memset(i, j, sizeof i)using namespace std;const int MAXN = 50000 + 5;int n, q;int h[MAXN], fmaxi原创 2017-06-11 10:27:39 · 360 阅读 · 0 评论 -
|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 · 480 阅读 · 0 评论 -
|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 · 368 阅读 · 0 评论 -
|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 · 455 阅读 · 0 评论 -
|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 · 288 阅读 · 0 评论 -
|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 · 506 阅读 · 0 评论 -
|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 · 351 阅读 · 0 评论 -
|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 · 281 阅读 · 0 评论 -
|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 · 409 阅读 · 0 评论 -
|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 · 431 阅读 · 0 评论 -
|hdu 3592|差分约束|World Exhibition
poj传送门/* Hdu 3592 差分约束系统 */#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<queue>using namespace std;#define ms(i,j) memset(i, j, sizeof i);const int INF原创 2017-04-16 15:18:32 · 469 阅读 · 0 评论 -
|hdu 1531|差分约束|King
Hdu传送门 题目很烦,慢慢体会。/* Hdu 1531 差分约束系统 教训: 1、SPFA的写法 2、SPFA判负环搞清楚有几个点 3、最短(长)路中的dis[i]表示 a[i]-a[0]的最大(小)值 */#include<cstdio>#include<cstring>#include<algorithm>#include<ve原创 2017-04-14 21:47:08 · 526 阅读 · 0 评论 -
|poj 3207|2-SAT|Ikki's Story IV - Panda's Trick
poj传送门/* poj 3207 2-SAT 本题教训: 1、注意加边 2、判两条线段是否重叠的方法 */#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<algorithm>#define ll long long#define db doubl原创 2017-04-04 17:05:57 · 414 阅读 · 0 评论 -
|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 · 442 阅读 · 0 评论 -
|poj 2763|LCA, 树状数组|或者|树链剖分, 线段树|Housewife Wind
poj 2763LCA+树状数组/线段树。首先本题大致一看就是一个LCA,但是本题有操作更改某边的权,这样会使得原本的far数组变化,不难发现,更改边权后影响该边下面所有点的答案。此时可以在LCA的DFS预处理时求出DFS序列(即时间戳),找到每个点管辖的范围,修改边权相当于修改该边连接的两个点深度深的那个点所管辖的范围,此时修改可以用暴力,但是由于far数组与LCA本身查询无关,我们可以用数据结构原创 2017-05-09 20:12:07 · 670 阅读 · 0 评论 -
|poj 1743|后缀数组|Musical Theme
poj 1743注意用heightheight分组如果最后一组最后一个元素在序列末,那么要进行处理!最方便是直接<=n<=n,还要注意的是不能重复,而且是mini+x<maximini+x<maxi不能是mini+x<=maximini+x<=maxi本题求的是长度最少为5的重复子串,并且重复子串可以加上或者减去一个数。我们将数字处理一下取差值,然后直接做,之后再结果+1+1即可#include<c原创 2017-06-10 19:50:41 · 361 阅读 · 0 评论 -
|poj 2299|权值线段树|Ultra-QuickSort
poj 2299 注意开long long 权值线段树就是线段树每个节点存每个权值出现的次数,本题求逆序对应该算一个比较简单的权值线段树,注意离散化#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<queue>using namespace std;#define ms(i, j)原创 2017-06-10 16:10:53 · 465 阅读 · 0 评论 -
|Poj 3581|后缀数组|Sequence
poj 3581 1. 因为第一个数比后面的大,所以将原串翻转后找出排第ii位的后缀输出,符合SA[i]>=2SA[i]>=2的最小ii(后缀数组中的排列是字典序) 2. 之后将之前已经处理的数据删掉,然后题目变为将剩下的数据分为两份翻转后字典序最小,那么我们设SS为这个序列,S1,S2,...,Sk,Sk+1,...SnS_1, S_2, ..., S_k, S_{k+1},...S_n,其中原创 2017-06-10 14:41:24 · 580 阅读 · 0 评论 -
|Poj 3623|后缀数组|Best Cow Line, Gold
poj 3623 字符串翻转后的和原串后的数组进行求后缀数组,然后之后两个指针i,ji,j选择两端rkrk值最小的输出,注意格式#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#define ms(i, j) memset(i, j, sizeof i)#define ll long longusi原创 2017-06-06 19:49:57 · 498 阅读 · 0 评论 -
|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 · 360 阅读 · 0 评论 -
|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 · 368 阅读 · 0 评论 -
|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 · 476 阅读 · 0 评论 -
|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 · 409 阅读 · 0 评论 -
|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 · 395 阅读 · 0 评论 -
|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 · 515 阅读 · 0 评论 -
|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 · 430 阅读 · 0 评论 -
|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 · 677 阅读 · 0 评论 -
|poj 2749|2-SAT|二分|Building roads
poj传送门/* poj 2749 二分后2-SAT判断 本题教训: 1、加边视情况加 2、2-SAT里面的c在solve里面千万不要再int c */#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<algorithm>#define ll long原创 2017-04-04 12:40:00 · 454 阅读 · 0 评论 -
|Hdu 3622|2-SAT|二分|Bomb Game
Hdu传送门/* hdu 3622 二分后2-SAT判断 本题教训: 1、2-SAT加边视情况加 2、浮点数二分查找的写法 3、浮点数的eps最好开多一点,防卡精度 */#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<algorithm>原创 2017-04-03 14:48:44 · 452 阅读 · 0 评论 -
|POJ 3461|KMP|Oulipo
Poj传送门 纯KMP模板题,又复习了一下模板#include<cstdio> #include<algorithm> #include<cstring> #include<vector>#define ms(i,j) memset(i,j, sizeof i);using namespace std;const int MAXL = 1000000 + 5; int T;原创 2017-03-05 21:14:34 · 448 阅读 · 0 评论 -
|Hdu 1512|可并堆|并查集|Monkey King
Hdu传送门 左偏树模板题,细节一定要注意#include<cstdio>#include<algorithm>#include<cstring>#define ms(i,j) memset(i,j,sizeof i);using namespace std;const int MAXN = 100000 + 5;struct node{ int l, r;//左偏树左、右孩原创 2017-03-03 21:58:05 · 449 阅读 · 0 评论 -
|poj 3311|状压DP|Hie with the Pie
poj传送门 经典TSP问题,可以使用状态压缩完成。#include<cstdio> #include<algorithm> #include<cstring> #include<vector>#define ms(i,j) memset(i,j, sizeof i);using namespace std;const int MAXN = 10 + 5;const int Z原创 2017-02-12 21:19:20 · 556 阅读 · 0 评论 -
|poj 1201|差分约束|Intervals
poj传送门 差分约束。 设dis[i]dis[i]为i−1i-1包含在ZZ集合内数的个数 由题意得,dis[b]−dis[a−1]≥cdis[b]-dis[a-1]\ge c, 由隐含条件每个数只出现一次或不出现,得0≤dis[i]−dis[i−1]≤10 \le dis[i]-dis[i-1] \le 1 整理后得, dis[b]−dis[a−1]≥cdis[i]−dis[i−1]≥原创 2017-02-11 16:06:54 · 387 阅读 · 0 评论 -
|Hdu 1828|线段树|Picture
Hdu传送门 线段树扫描线求周长并,看这篇好文学习: http://blog.csdn.net/tomorrowtodie/article/details/52048323#include<cstdio> #include<algorithm> #include<cstring> #include<vector>#define ms(i,j) memset(i,j, sizeof原创 2017-02-11 00:02:41 · 463 阅读 · 0 评论 -
|Hdu 1542|线段树|Atlantis
Hdu传送门 线段树离散化以后进行扫描线。 http://www.cnblogs.com/scau20110726/archive/2013/03/21/2972808.html 这篇文章讲得很好,详解看以上网站#include<cstdio> #include<algorithm> #include<cstring> #include<vector>#define ms(i,j原创 2017-02-10 18:06:20 · 473 阅读 · 0 评论 -
|poj 2528|线段树|Mayor's posters
poj传送门 线段树离散化区间后区间染色,注意染区间不是点#include<cstdio> #include<algorithm> #include<cstring> #include<vector>#define ms(i,j) memset(i,j, sizeof i);using namespace std;const int MAXN = 10000 + 5; cons原创 2017-02-09 23:46:55 · 375 阅读 · 0 评论 -
|poj 2723|2-SAT|二分|Get Luffy Out
poj传送门 二分枚举m,然后建2-SAT图即可。#include<cstdio> #include<algorithm> #include<cstring> #include<vector>#define ms(i,j) memset(i,j, sizeof i);using namespace std;const int MAXM = 2100, MAXN = 1100;s原创 2017-02-09 17:46:19 · 437 阅读 · 0 评论 -
|Hdu 2087|KMP|剪花布条
Hdu传送门 KMP即可。注意不可重叠,用一个lastlast记录上一个不重复匹配成功的位置,之后如果匹配成功,记当前位置为ii,如果i−last>模式串长度i-last>模式串长度,即匹配成功,更新lastlast#include<cstdio> #include<algorithm> #include<cstring> #define ms(i,j) memset(i,j, siz原创 2017-02-08 12:05:21 · 354 阅读 · 0 评论 -
|Hdu 2222|AC自动机|Keywords Search
Hdu传送门 AC自动机模板题,注意重复关键字的处理#include<cstdio> #include<algorithm> #include<cstring> #include<queue> #define ms(i,j) memset(i,j, sizeof i); using namespace std;const int MAXN = 10000 + 5原创 2017-02-07 09:55:46 · 435 阅读 · 0 评论 -
|poj 2406|KMP|Power Strings
poj传送门 可以知道,在一个字符串里的最短周期是ms=n−f[i]ms=n-f[i], 其中ff是kmp中的失配函数。 如果ms|nms|n, 那么输出n/ms, 否则输出1.#include<cstdio> #include<algorithm> #include<cstring> #define ms(i,j) memset(i,j, sizeof i);原创 2017-02-06 15:39:19 · 436 阅读 · 0 评论