![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
时雨晴天
PhD毕业,正在寻找下一个人生目标,愿求文武双全之道。
展开
-
Hdu 4514 湫湫系列故事——设计风景线 (非连通图并查集判环+树的直径)
去年比赛时做这题完全无思路……原创 2014-05-11 10:31:58 · 967 阅读 · 0 评论 -
Poj 3310 Caterpillar (并查集判环+度)
参考了:题意:判断一个给定的图,没有环,而且存在一个链,图上的所有点或者在这条链上或者在其的邻居题解:1.判断环:对于无向图:如果 点 然后使用并查集进一步判断环的存在2.判断是否存在链首先统计各个点的度,然后对于度为1的点,将其相连的边删掉,再统计新图的度,这时新图应该剩下一条链,也就是说,新图的不存在大于2个度为1的点,而且这个点在旧图的度是大于1的。原创 2014-05-05 22:18:44 · 1173 阅读 · 2 评论 -
携程第二场 Poj 1182 食物链(带权并查集) Poj 1948 Triangular Pastures Poj(dp二维背包) 1740 A New Stone Game(博弈)
携程的第二场好多原题,网上好多题解。。。原创 2014-04-11 21:43:20 · 1725 阅读 · 0 评论 -
Hdu 2473 Junk-Mail Filter (并查集的删除)
题意:有n个集合,m个操作。对每个操作输入的如果为M,那就合并两个集合,否则将此点分离出去,问一共有多少个集合。举例:对于M 0 2M 1 2S 2合并后的集合是{0,1,2},把2删除掉之后, 集合变为 {0,1}思路:建立一个映射,通过改变将删除点的映射关系,同时改变其父节点到一个新的、虚设的点。这种方法很费空间。直接将一个点的父节点改成自身是不行的,因为如果这点原创 2014-02-14 11:37:43 · 938 阅读 · 0 评论 -
并查集 Hdu 1272 (判环)+ Hdu 1213 + Hdu 1232 + Hdu 3172
Hdu 1272 小希的迷宫思路:两点的根节点相同,并且他们又彼此连通,则说明构成环。如果无环且 点数-1==边数 则说明只有一个连通块#include #include const int MAX=100005;bool visit[MAX];class Disjoint_Set{public: int father[MAX]; /*father原创 2014-01-23 19:58:42 · 837 阅读 · 0 评论 -
并查集 Poj 1838 + 1611 + 1962 + Zoj 2833
Poj 1838这个题可能用搜索更好,但既然是在练习并查集……#include #include #include #include using namespace std;struct Point{ int x,y,id;}data[16005];int ans[16005];const int MAX=16005;class Disjoint_Set原创 2013-05-15 22:15:49 · 1058 阅读 · 0 评论 -
Poj 3728 The merchant (tarjan-LCA高级应用)
题意:给出n个点买入与卖出商品的价格,然后给出n-1条边。 问: 从u-v上进行一次交易的最大获益:可以选一个在u-v之间的点买入,然后再这个点之后的点卖出。参考了:http://blog.csdn.net/waitfor_/article/details/7264132思路:tarjan离线LCA,离线可以计算出查询的一个点到祖先的最优值,然后记录结果,等整个该祖先的子树都遍历完,就原创 2014-02-06 21:17:34 · 1176 阅读 · 2 评论 -
Hdu 4409 Family Name List (LCA 家谱 STL 2012金华网赛)
题意:给出一个家谱,处理三种操作。(1)L重新打印家谱,同一代的人按照升序;(2)b name 输出name的亲兄弟有多少个?(3)c name1 name2输出name1和name2 的最近公共祖先。注意(3):如果最近公共祖先是name1或者name2,那么要输出其父亲。(因为自己不能是自己的祖先。。)#pragma warning(disable:4786)#in原创 2014-02-06 19:35:30 · 989 阅读 · 0 评论 -
Poj 1986 Distance Queries (LCA 树上两点间最短距离)
题意:给出n个点和m条边,再给出K个询问,询问x和y点的树上最短距离本题貌似在线算法快很多,282ms,离线算法1360ms,个人还是觉得在线算法好理解些。#include #include #include const int N=40005;struct node{ int v,dis,next;}edges[N<<1];int head[N],e;int pre原创 2014-02-06 18:42:42 · 2417 阅读 · 0 评论 -
LCA 学习小记 Poj 1330 Nearest Common Ancestors
LCA:最近公共祖先(Least Common Ancestors)对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。另一种理解方式是把T理解为一个无向无环图,而LCA(T,u,v)即u到v的最短路上深度最小的点。解决LCA问题主要有两种方法:基于RMQ的在线算法,基于并查集的tarjan离线算法。在线算法:用比较原创 2014-01-01 22:27:04 · 757 阅读 · 0 评论 -
RMQ的ST算法学习小记 Poj 3264 Balanced Lineup
RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j主要方法及复杂度(处理复杂度和查询复杂度)如下:1.线段树(segment tree) O(n)-O(qlogn)2.ST(实质是动态规划) O(nlogn)-O(1)3.RMQ标准算法:先规约成LCA(Lowest Common Ancesto转载 2013-12-31 21:44:17 · 1018 阅读 · 0 评论 -
线段树学习小记 Hdu 1754+Poj 3264 (区间最值)
简单复习了下线段树,刷两道水题恢复手感。话说数位dp还没学完。。。。复习资料:数据结构之线段树 | 董的博客http://dongxicheng.org/structure/segment-tree/NotOnlySuccess | 线段树专辑http://www.notonlysuccess.com/index.php/segment-tree/H原创 2013-04-11 22:55:43 · 933 阅读 · 0 评论 -
Poj 1635 Subway tree systems (树的最小表示)
题目链接:http://poj.org/problem?id=1635题意:初始时站在树的根节点,若朝着远离根的方向走,记录“0”,接近根的方向走记录“1”。并且树的每一条边只能来回走一次(即向下和返回)。一个合法的01序列可以描述出一棵树的形态。现在给出两个合法的01序列,判断两棵树是否同构。思路主要参考了这里:http://blog.csdn.net/tiaotiaoyly/artic原创 2013-07-17 18:02:31 · 1759 阅读 · 0 评论 -
福州大学第十一届程序设计竞赛 部分题目题解
比赛链接:http://acm.fzu.edu.cn/contest/index.php?cid=139当今天下午我知道有这个比赛的时候原创 2014-04-27 20:19:46 · 1552 阅读 · 4 评论 -
Hdu 4006 The kth great number (第k大元素 优先队列的几种写法)
题意:不断地读入数据,询问第k大的是多少。思路:维护只有k个元素且队首元素最小的优先队列总结下常用的三种写法,个人还是喜欢结构体这种。#include#includeusing namespace std;struct Node{ int data; bool operator < (const Node b) const { return data>b.data;原创 2014-02-13 19:57:38 · 1076 阅读 · 0 评论 -
Poj 3250 Bad Hair Day + Poj 2796 Feel Good (单调栈)
Poj 3250 Bad Hair Day题意:有 n 头牛头站成一列。每头牛有一定的高度,并且能看到其前面高度比它低的牛的头顶,直到被某头高度大于等于它的高度的牛所挡住。计算每头牛能看到的牛头顶的数量之和。#include #include using namespace std;int main (){ int n; while (~scanf("%d",&n))原创 2014-02-05 18:49:26 · 1126 阅读 · 0 评论 -
单调队列及其deque写法 HDU 3415+Poj 4002 (日期处理) + 合并果子
尝试用deque写一下单调队列,发现速度还是可以接受的,STL依赖症越来越严重了。。。。HDU 3415 Max Sum of Max-K-sub-sequence题意:给出一个有N个数字(-1000..1000,N#include #include #include using namespace std;#define upmax(a,b) ((a)=(a)>(b)原创 2014-02-02 17:26:45 · 1660 阅读 · 0 评论 -
Poj 3667 Hotel + Hdu 4553 约会安排 (线段树最左空区间)
题目链接:http://poj.org/problem?id=3667题意:旅馆的N(1 ≤ n ≤ 50,000) 个房间初始时全为空。现在有M(1 ≤ m (1)1 X,要求得到连续的X个房间,输出X个连续房间的最小编号;如果有多个X的连续房间,输出编号最小的一个;不存在输出0;(2)2 X Y,将X开始的连续Y个房间退掉。思路:节点设置本区间最大连续空闲区间,以及从左侧原创 2013-05-25 12:40:30 · 847 阅读 · 0 评论 -
Hdu 1542 Atlantis + Hdu 1255 覆盖的面积 (线段树矩形面积并)
用线段树解决矩形面积并的问题。从以下链接学习,并参考了代码:http://www.cnblogs.com/ka200812/archive/2011/11/13/2247064.html目前只能写出朴素写法,dp写法还没有学会。Hdu 1542#include #include #include using namespace std;const int N=11原创 2013-05-25 15:18:15 · 940 阅读 · 0 评论 -
线段树区间染色 浮水法 学习小记 Poj 2777 + Poj 2528
复习过的东西必须时常拿来练练,虽说都是水题。。。。Poj 2777 典型的区间染色问题,貌似我的写法为了不数组越界必须多开一倍的数组空间。。。。。还没有想到解决方法,有机会参考一下别人的写法。Poj 2528 和上面那道差不多,用线段树写的时候用了STL里的map进行离散化,因为不可能开出10000000*4大小的数组。我的代码在poj过不了,看discuss里面有人说测试数据有问题…原创 2013-05-14 19:07:02 · 1598 阅读 · 0 评论 -
Poj 2299 Ultra-QuickSort 求逆序数 4种方法总结
题目链接:http://poj.org/problem?id=2299题意:给出长度为n的序列,每次只能交换相邻的两个元素,问至少要交换几次才使得该序列为递增序列。思路:由线性代数知识,本题就是求一个数列的逆序数,逆序数较大需要__int64。总结目前接触到的四种方法:方法一:归并排序代码并非全部原创,但是参考自哪里我已经忘了……#include #include原创 2013-06-19 13:17:06 · 957 阅读 · 0 评论 -
BZOJ 1878 【SDOI2009】HH的项链(离线+树状数组)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1878思路:参考了http://blog.csdn.net/njlcazl/article/details/8758443下面加一些自己的理解:因为操作中只有询问没有更新,所以可以使用离线算法,对所有询问按右区间升序排序。以该数字第一次在区间中出现的点代表所有的点。如果是第原创 2013-07-11 11:06:28 · 2015 阅读 · 0 评论 -
Poj 3321 Apple Tree(树变序列+时间戳+树状数组)
题目链接:http://poj.org/problem?id=3321题意:一棵具有n个节点的树,一开始,每个节点上都有一个苹果。现在给出m组动态的操作:(C,i)是摘掉第i个节点上面的苹果(若苹果不存在,则为加上一个苹果),(Q,i)是查询以第i个节点为根的子树有几个苹果(包括第i个节点)。思路:用DFS时间戳的方法将树转变为序列:做一次dfs,记下每个节点的开始时间Start[i]和结原创 2013-07-10 21:52:38 · 948 阅读 · 0 评论 -
Lightoj 1085 All Possible Increasing Subsequences (树状数组+DP)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1085题意:找出一个序列中的所有上升序列。思路:离散化后,树状数组优化的DP。dp[i]表示以a[i]为序列最后一个数字的上升序列的个数,状态转移方程见注释。很久前写的,都快忘了这题是怎么回事了……#include #include #include #includ原创 2013-07-18 10:46:43 · 1190 阅读 · 0 评论 -
Poj 3416 Crossing + Poj 2464 Brownie Points II (树状数组)
很像的两道题,放在一起总结Poj 3416 Crossing题目链接:http://poj.org/problem?id=3416题意:在平面上有N个点,每个点都有一个坐标,然后在平面上划一条水平线,划一条垂直线,这两条线把平面分成四个区域,计算1区和3区点的和与2区和4区点的和的差的绝对值,即|(a1+a3)-(a2+a4)|,ai表示i区的点数目。点不会落在两条线上。要划M原创 2013-07-18 10:06:37 · 1049 阅读 · 0 评论 -
树状数组水题小结 Poj 2352 + 2481 + 3067
Poj 2352 Stars题目链接:http://poj.org/problem?id=2352题意:在输入的星星中统计出每颗星星的左下角的星星数(包括正左与正下),称为一个星星的等级,输出每个等级下的星星数.思路:由于输入时有序:即优先y坐标升序,然后x升序,相当于每输入一个新的数据都不会对之前输入的星星的等级产生影响,也即当前横坐标比x小的星星的数量就是当前星星的等级#i原创 2013-07-18 09:54:33 · 1005 阅读 · 0 评论 -
单调队列学习小记 Poj 2823 + Hdu 3530 (deque)
以前学过的东西,拿出来复习下。poj2823 单调队列(含单调队列的学习) - Jason Damon博客园http://www.cnblogs.com/Jason-Damon/archive/2012/04/19/2457889.html单调队列 - Hackbuteer1的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/hackbuteer原创 2013-06-17 14:09:19 · 1726 阅读 · 0 评论 -
Splay伸展树学习小记 Poj 3580 SuperMemo
伸展树看了几天了,总算是摸着点方向,只能说这真的是神一样的数据结构,各种延迟标记……参考了很多大牛的博客,代码的基本写法从网上挑了一种比较好理解的开始模仿。这里有一个模板和对一道题的分析,一开始我模仿的就是这个,最后发现指针还是有点不习惯……最后我会贴出用这个模板解这题的代码。这个模板是少数这道题可以跑进1s内的,不过利用数组建树那部分似乎有bug:Splay Tree 标签_51原创 2013-08-27 21:45:21 · 1426 阅读 · 0 评论 -
BZoj 1500 [NOI2005]维修数列 (Splay 模板)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1500debug 完这道题之后整个人都斯巴达了。。。。。。。目测电气自动化专业这学期天书略多。。。。。Splay最基本的功能这道题基本都包括了,参考了上一篇博文提到的博客。下一题要开始自己想了。#include #include using namespace std;原创 2013-08-28 12:57:36 · 1471 阅读 · 0 评论 -
Hdu4193 Non-negative Partial Sums (单调队列)
题意:给你一个n项的序列,每次可以把序列的首项移动到末尾,一共可以构成n种序列,问一共有多少种序列满足条件:序列的前i项和都大于等于0(i:1~n)。思路:遇到循环队列,很普遍的想法:用2倍的数组把数据再存一遍。用sum数组预处理出前缀和,数据范围不会超int,这样sum中任意两项之差即为这一段的数字之和。对于区间i-n+1 ~ i,(i>=n)如果该区间内最小的sum[k],原创 2013-11-11 22:50:45 · 1064 阅读 · 0 评论 -
第九届北航程序设计大赛网络预赛——水题题解
比赛链接:http://acm.buaa.edu.cn/contest/117/home/噩梦般的期末七连考刚刚过半,按现在的进度估计我cet6是要果考了,求过。。。。本次比赛是复习期间断断续续做的,弱菜我冥思苦想只搞出6题,实在太弱……比赛结束后雷神告诉了我另外几道的思路,考完之后希望能有时间挑战下。A BUAA 759 晴天小猪是点赞狂魔题目链接:http://acm.buaa原创 2013-12-03 22:44:04 · 1227 阅读 · 0 评论 -
划分树学习小记 Poj 2104+Poj 2761+Hdu 2665 (区间第k大数)
做某线段树专题,结果第一题就不会。。。。囧网上有各种代码实现最后挑了一个和我代码风格比较像的学习了下,发现这东西实现过程中有好多细节需要注意。从以下地方学习,并参考了部分代码:poj 2104 K-th Number(划分树) - 志当存高远 - 博客频道 - CSDN.NEThttp://blog.csdn.net/fp_hzq/article/details/7原创 2013-05-08 17:13:34 · 959 阅读 · 0 评论