自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

No Program No Life

落寞是岁月的痕迹。

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

原创 团体程序设计天梯赛-练习集-L3-002. 堆栈(线段树-区间第k大)

题目链接其实可以套主席树求动态的区间第k大。但是这里规定了范围[1,100000] 我们可以建立一颗线段树,线段树的节点值表示在这个区间内数的出现次数的总和 比如区间为[2,2]的节点的值为2的出现次数 这样相当于对整个栈序列排了个序。 然后我们可以用二分的方法查询区间第k大。 这里的k就是当前栈序列大小的中值#include <cstdio> #include <

2017-02-19 18:08:59 666

原创 团体程序设计天梯赛-练习集-L2-012. 关于堆的判断(小顶堆)

题目链接这里建堆要每输入一个值就插入并且向上调整 在堆顶设置一个哨兵会省点操作 还要注意值有负数,在处理字符串的时候要注意。(之前一直不知道哪里有问题,后来才发现负数忘了处理,一直过不了)#include <cstdio> #include <iostream> #include <cstring> #include <string> #include <algorith

2017-02-19 18:01:17 978

原创 【POJ2762】Going from u to v or from v to u?(tarjan+缩点+拓扑排序)

题目链接 题目大意: 判断给你的有向图是否为单向连通图用tarjan算法求出强连通分量,以强连通分量为顶点建新图(tarjan算法O(n+m)) 如果一个DAG是单向连通图当且仅当它的拓扑序唯一 也就是说拓扑排序时队列中的元素不能大于1虽然这题点数较小,可以用矩阵,但是前向星可以适应更大的点数#include <cstdio> #include <queue> #in

2017-02-17 15:48:47 912

原创 【HDU1269】迷宫城堡(tarjan)

题目链接 题目大意: 判断给你的图是否为强连通图tarjan算法套下就好了 判断强连通分量的数量是否为1#include <bits/stdc++.h> using namespace std; #define cl(a,b) memset(a,b,sizeof(a)) const int maxn = 100000 + 10; int head[maxn],cnt;

2017-02-17 15:41:00 491

原创 【HDU1005】Number Sequence(矩阵快速幂)

题目链接 题目大意: f[1] = 1,f[2] = 1,f[n] = (a*f[n-1]+b*f[n-2])%7(n > 2) 给你a,b。求f[n]。网上好像都是找规律的。 我想用下矩阵求递推式,类似矩阵快速幂求斐波那契。 搞清楚原理后,只要稍微改动下就可以了。我们可以构造矩阵 (f[3]f[2])=(a b1 0)(f[2]f[1])\left(^{f[3

2017-02-15 22:13:03 1565 5

原创 HDU 1087 Super Jumping! Jumping! Jumping! && 1114 Piggy-Bank 简单dp

hdu1087 题目大意: 给你N个数,问满足递增子序列的最大和为多少。dp[i] := 表示以第i个数为结尾满足递增条件的最大和#include <bits/stdc++.h> using namespace std; #define cl(a,b) memset(a,b,sizeof(a)) typedef long long LL; const int INF =

2017-02-15 21:55:23 266

原创 【HDU1176】免费馅饼(记忆化搜索)

题目链接简单的记忆化搜索。#include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long LL; #define ALL(v) (v).begin(),(v).end() #define cl(a,b) memset(a,b,sizeof(a))

2017-02-14 14:05:24 371

原创 【HDU1024】Max Sum Plus Plus(dp)

题目链接题目大意: 将n个数的序列分成不想交的m段,问m段区间的最大和为多少转自kuangbin 设Num为给定数组,n为数组中的元素总数,Status[i][j]表示前i个数在选取第i个数的前提下分成j段的最大值,其中1<=j<=i<=n && j<=m,状态转移方程为:Status[i][j]=Max(Status[i-1][j]+Num[i],Max(Status[

2017-02-14 13:24:45 208

原创 未完成~简单dp

慢慢补充。 hdu1003hdu1024hdu1081……

2017-02-13 19:59:50 392

原创 hiho一下 第137周-建造基地(背包dp)

题目链接 官方题解 初一看很容易看出是完全背包的dp。 但是还要考虑建设值的溢出,也就是说dp[k]不一定是成本最小的。 我们可以往前推一步,假设dp[k],dp[k+1]…中最小的为dp[x] 那么dp[x] 肯定是由小于k的某个状态y,dp[y]+a[i]递推而来。 我们就枚举y值来更新x值。把大于k的x值都算在k上。那么最后答案就是dp[k]的相加。 时间

2017-02-13 15:20:56 246

原创 团体程序设计天梯赛-练习集-L3-011. 直捣黄龙(最短路+计数)

题目链接 最快路径其实就是最短路径。以下数组都在满足最短路条件下 num[i] := 表示到达i点的最短路径数 len[i] := 表示到达i点所经过的点数,不包括起点 tot[i] := 表示到达i点所救的人数#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #

2017-02-12 15:17:24 633

原创 团体程序设计天梯赛-练习集-L3-005. 垃圾箱分布(最短路dijkstra)

题目链接对每一个垃圾桶都用一遍dijkstra,然后把相应的数据存入结构体排下序,再输出就可以了 如果有一个居民点和垃圾桶间没有路径,这肯定是不行的。#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; #define cl(a,b

2017-02-12 15:10:31 625

原创 团体程序设计天梯赛-练习集-L3-007. 天梯地图(最短路)

题目链接 这题跟pat(A)1111很像。。 只是在求最短路和最快的路的次要条件不一样并且输出格式颠倒一下。 之前写过pat(A)1111的代码 就稍微改下。#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; #define

2017-02-11 22:56:37 420

原创 团体程序设计天梯赛-练习集-L2-014. 列车调度(LIS)

题目链接 决赛的L2-2,当时暴力下,有几个case是TLE的。。 现在一看,就感觉有点像是LIS,然后交了下还真过了。。至于为什么 要将一个序列以递减的顺序出栈,在每个栈的序列都要是从上到下是递减的。 假设栈的数量小于LIS,那么总会有一个数的前面有比它小的数 就是有一个栈的不是按照从上到下是递减的 那么出栈也不可能是递减出栈了#include <cstdio>

2017-02-11 16:54:06 456

原创 团体程序设计天梯赛-练习集-L2-013. 红色警报(dfs)

题目链接还记得这是去年决赛时L2的第一道题,当时还是有点懵。现在看看就是暴力的dfs。。#include <cstdio> #include <iostream> #include <cstring> #include <string> #include <algorithm> #include <vector> #include <set> #include <map> #

2017-02-11 16:43:09 348

原创 团体程序设计天梯赛-练习集-L2-007. 家庭房产(并查集)

题目链接 并查集的略微扩展,用Size数组记录人数,num数组记录房产数,area数组记录面积 就是处理起来会有点麻烦。#include <cstdio> #include <iostream> #include <cstring> #include <string> #include <algorithm> #include <vector> #include <set

2017-02-11 16:39:28 537

原创 团体程序设计天梯赛-练习集-L3-004. 肿瘤诊断(三维bfs)

题目链接 这题原来写的是dfs。结果给我段错误,应该是爆栈了?后来改成了三维bfs#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #include <queue> using namespace std; #define ALL(v) (v).begin(),(v).

2017-02-10 16:37:49 380

原创 团体程序设计天梯赛-练习集-L2-004. 这是二叉搜索树吗?

题目链接虽然只是L2级,但是感觉比一些L3还要难写。。其实就是建树的一个过程,如果可以把序列划分成两个部分,一部分的值都比这个节点小,另一部分的值都大于等于这个节点的值 对于每一个节点,都如此判断,递归进行。 这题要注意很多细节。 通不过的可以测试下 Sample1: 2 2 1 Sample2: 3 3 1 2#include <cstdio> #incl

2017-02-10 16:33:38 486

原创 hiho一下 第136周-优化延迟(二分)

题目链接 二分缓冲区k的大小,用优先队列模拟,不断记录满足条件的最小值#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #include <queue> using namespace std; typedef long long LL; const int maxn =

2017-02-09 16:16:15 222

原创 【HDU3065】病毒侵袭持续中(AC自动机)

题目链接 题目大意: 给你n个只包含大写字母的字符串,最后一行给你一个字符串,问这个字符串分别包含每种字符串多少个。要统计数量,而不是种数。#include <bits/stdc++.h> using namespace std; #define cl(a,b) memset(a,b,sizeof(a)) typedef long long LL; const int I

2017-02-09 15:00:27 263

原创 【HDU2896】病毒侵袭(AC自动机)

题目链接 题目大意: n个字符串,m个字符串,问m个字符串里每一个都包含了哪几种n个字符串里的。跟上题类似,只不过这题有128个分支,把cnt数组用来记录n个字符串的编号,输出用优先队列维护。#include <bits/stdc++.h> using namespace std; #define cl(a,b) memset(a,b,sizeof(a)) typedef

2017-02-09 14:55:26 284

原创 【HDU2222】Keywords Search(AC自动机)

题目链接 题目大意: 给你n个字符串,最后给你一个字符串,问最后的字符串里包含前面n个里面的几种字符串AC自动机入门。简单的说就是树上的KMP。 kuangbin的模板失败指针的构造: 构造失败指针的过程概括起来就一句话:设这个节点上的字母为C,沿着他父亲的失败指针走,直到走到一个节点,他的儿子中也有字母为C的节点。然后把当前节点的失败指针指向那个字母也为C的儿子。如

2017-02-09 14:48:51 203

原创 Codeforces Round #396 (Div. 2)-D. Mahmoud and a Dictionary(关系并查集)

题目链接 题目大意: n个单词,m个关系,q次查询 有两种关系: 1 a b表示a,b两个单词同义 2 a b表示a,b两个单词反义 如果关系跟之前的关系冲突则无视当前关系 每次查询问两个单词属于1还是2,都不属于则输出3一看就发现跟poj1703和poj1182两道关系并查集很像,,可以说是结合后的题。 这里我把关系1,2变成0,1刚好是%2后的数PS:为什

2017-02-08 16:48:30 332

原创 Codeforces Round #396 (Div. 2)-C. Mahmoud and a Message(dp)

题目链接 题目大意: 给你n长度的字符串,以及26个数,表示’a’-‘z’所在字符串的最大长度 问满足条件的字符串集合划分数,以及最大的子串长度,最小的集合数dp[0][i] := 表示前i个字符的子串划分数 dp[1][i] := 表示前i个字符的划分里最大的字串长度 dp[2][i] := 表示前i个字符的划分里最小的集合数#include <cstdio> #

2017-02-08 16:41:14 286

原创 【POJ2155】Matrix(二维树状数组)

题目链接 题目大意: 给你n*n的矩阵初始为0,有T次操作 两种操作: 1.C x1 y1 x2 y2 修改(x1,y1)到(x2,y2)的子矩阵值,即0变1,1变0 2.Q x y 查询(x,y)的值树状数组有两种应用。跟线段树类似 1.单点修改,区间查询 2.区间修改,单点查询具体的证明及解释戳我#include <cstdio> #include <ios

2017-02-08 14:21:34 250

原创 【POJ3253】Fence Repair(优先队列+贪心)

题目链接 题目大意: 将一块长度为L的木板切割为两块,花费为L,切割后的两块木板的长度和为切割前的长度。给你N个切割后的木板的长度,问最小花费是多少。书上的一道贪心题。用huffman编码的思想贪心,感觉挺有趣的。 我们可以考虑将两块合并成一块木板,花费为合并后的木板的长度。 根据huffman思想,每次选取长度最小的两个合并,以此贪心,最后可以保证花费最少。如何选取

2017-02-07 14:42:48 456

原创 51nod 欢乐手速场1(迎新春)-B序列变换(莫比乌斯反演)

题目链接 序列变换 alpq654321 (命题人) 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 lyk有两序列a和b。 lyk想知道存在多少对x,y,满足以下两个条件。 1:gcd(x,y)=1gcd(x,y)=1 2: abx=baya_{b_x} = b_{a_y}例如若a={1,1,1},b={1,1,1}。那么存在7对,因为除了x

2017-02-06 20:00:21 410

原创 【SPOJ】QTREE - Query on a tree(树链剖分+线段树(基于边权))

题目链接 题目大意: 给你n个点树,有两种操作 1.CHANGE i ti :将第i条边的值改为ti 2.QUERY a b :查询a点到b点的路径上的最大值跟上题类似,不过这题还简单点,没有取反操作。 直接套就行了。#include <cstdio> #include <cstring> #include <algorithm> using namespace

2017-02-04 17:30:27 300

原创 【POJ3237】Tree(树链剖分+线段树(基于边权))

题目链接 题目大意: 有T组数据 给你n个点的树 有三种操作: 1.CHANGE i v :将第i条边的值改为v 2.NEGATE a b :将a点到b点路径上的边权取反 3.QUERY a b :查询a点到b点路径上最大的边权值由于有取反操作,我们记录最大值的同时记录下最小值 如果要取反,则将最大最小值取反并交换即可 用线段树维护注意懒惰标记

2017-02-04 17:18:50 534

原创 【POJ2763】Housewife Wind(树链剖分+线段树(基于边权))

题目链接 题目大意: n个点,m个操作,初始位置为s 有两个操作: 1.ope to :输出从s到to的路径长度,并将to赋值给s 2.ope i v :将第i条边的长度改为v基于边权,要将边权转化为点权。 将这条边的值作为这条边两端点深度大的点权即可 接着用线段树维护即可。 PS:差点wa到吐血。。#include <cstdio> #include <cs

2017-02-04 15:41:37 274

原创 【HDU1695】GCD(莫比乌斯反演+容斥)

题目链接 题目大意: 问x在[1,a],y在[1,b],有多少无序对gcd(x,y) == k首先将范围缩小到[1,a/k]或[1,b/k] 要比较哪个范围较小,因为gcd(x,y)最大为k的min(a/k,b/k)倍 先求出所有的种数,然后再减去重复的#include <bits/stdc++.h> using namespace std; #define cl(a

2017-02-04 13:15:02 347

原创 【BZOJ1036】[ZJOI2008]树的统计Count(树链剖分+线段树)

题目链接 Description   一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成 一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u

2017-02-03 18:44:53 283

原创 【HDU3966】Aragorn's Story(树链剖分+线段树)

树链剖分用一句话概括就是:把一棵树剖分为若干条链,然后利用数据结构(树状数组,SBT,Splay,线段树等等)去维护每一条链,复杂度为O(logn)那么,树链剖分的第一步当然是对树进行轻重边的划分。定义size(x)为以x为根的子树节点个数,令v为u的儿子中size值最大的节点,那么(u,v)就是重边,其余边为轻边。当然,关于这个它有两个重要

2017-02-03 17:00:38 488

原创 Codeforces Round #394 (Div. 2)-E. Dasha and Puzzle(dfs)

题目链接PS:看了半天题意没看懂。。题目大意: 给你N个点的树,问能否将这些点放在坐标平面上,要求边平行于坐标轴。首先一个点的度数不超过4。因为平面只有四个方向,若度数超过4,肯定不存在方案。 然后就以2^n为长度递减dfs放点。 ∑ni=12i<2n+1\sum_{i=1}^n2^i < 2^{n+1}#include <bits/stdc++.h> using na

2017-02-03 15:52:55 274

原创 【BZOJ2818】Gcd(莫比乌斯反演)

题目链接莫比乌斯反演是组合数学中很重要的内容,可以用于解决很多组合数学的问题。 参考 假设有两个定义在非负整数集上的函数f(n)f(n)和F(n)F(n) 有两种表述形式 第一种: F(n)=∑d|nf(d)F(n) = \sum_{d|n} f(d) 则 f(n)=∑d|nμ(d)F(nd)f(n) = \sum_{d|n}μ(d)F(\frac n d) 第

2017-02-02 17:26:44 452

空空如也

空空如也

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

TA关注的人

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