![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 63
XDU_Truth
这个作者很懒,什么都没留下…
展开
-
POJ 1703 Find them, Catch them(并查集,向量偏移)
http://poj.org/problem?id=1703题目大意:有一些黑帮的人分为两派,然后给出一些语句,D代表两个人在不同的帮派里,A代表输出两人的关系(不确定,在一个帮派里或不在一个帮派里)。做之前就知道这题是并查集的题目但是还是没什么思路,看题解也没看明白,后来看一位大牛讲解向量偏移的博客才明白了一点http://hi.baidu.com/tomspirit/item/d1f2a1原创 2012-08-30 23:40:33 · 732 阅读 · 0 评论 -
线段树单点更新总结#by zh
终于把那篇博客里单点更新的题写完了,前面5道题都很简单,就是在最后一道卡的时间比较长,一是题意没明白,二是不知道反素数这个东西,不过还是看题解过掉了这题。嗯,下面该再开个区间更新什么的写了。http://acm.hust.edu.cn:8080/judge/contest/view.action?cid=17274#overview把链接挂在这里原创 2012-11-23 00:19:05 · 389 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers(线段树)#by zh
写这题的时候脑残了,伤不起了,开始出了点其他的问题,lazy标记向下传递更新的时候只需要更新lazy[rt]的值而不是lazy[rt#include #include #include using namespace std;#define MAXN 100005long long sum[MAXN<<2],lazy[MAXN<<2];char str[10];void push原创 2012-11-23 17:12:10 · 392 阅读 · 0 评论 -
求逆序数#no
今天做了下POJ2299,逆序数的2种方法:1.归并排序法:#include #include #include #include using namespace std;long long ans;int c[500100];int a[500100];void merge(int l,int m,int r){ int i = l,j = m+1;原创 2012-12-08 23:34:06 · 510 阅读 · 0 评论 -
POJ3349 #no
用hash链地址法,取了个99997大素数就AC了#include #include #include #include #include using namespace std;const int mod = 99997;struct node{ int len[6];}f[100010];vector hash[100000];int size[1原创 2012-12-10 18:12:42 · 959 阅读 · 1 评论 -
POJ3274
这个题也是数组hash,不过很巧妙,先开始看不出来。后来看了别人的解题才知道。强烈推荐code:#include #include #include #include using namespace std;#define mod 999983struct hash{ int d; hash* next; hash(){next =原创 2012-12-12 22:00:57 · 495 阅读 · 0 评论 -
POJ2886(反素数+约瑟夫环+线段树)#nobody
反素数f(x):是指不大与x约数最多的数反素数的程序见我这篇博客:http://blog.csdn.net/xdu_truth/article/details/8043051先打表出来反素数,那么我们就可以知道n个人第几个人出来事最大的。然后就是个约瑟夫环问题,但是这题数据范围较大,所以就要用到线段树查找删除。CODE:#include #include #原创 2013-01-06 00:09:32 · 554 阅读 · 0 评论 -
SGU 155 Cartesian Tree(线段树)#by zh
题意很明确就是构造笛卡尔树,但是时间卡的很紧。之前在POJ上做过这道题,但是那次做的题时间很宽松,用上次的解法放到这题上就TLE了,比赛的时候也没想起来更好的解法。其实现在想想还是比较容易想到的,首先按照k值排序,然后在1到n直接找最小的元素作为根节点,然后左边的元素都是左子树,同样的方法递归找左子树的根节点,在找的过程中更新解,最后直接输出就可以了。#include #include #in原创 2013-03-19 00:09:12 · 767 阅读 · 0 评论 -
ZOJ Monthly, March 2013 A题 A Simple Tree Problem(线段树)#zh
这次月赛太无语了。H题看起来是个全场题不知道为什么大家都被卡的蛋疼,于是就去想A题了,开始没什么想法,还以为要开N个线段树,后来WQJ说先序遍历一下就可以转换成1维线段树了,想一下确实是这样。由于不是二叉树,开始建树的时候有点蛋疼,用了数据结构讲过的儿子兄弟表示法(看来严蔚敏那本书还是有点用的)。建树之后遍历出每个节点在线段树中的对应位置和子树中节点的总数。接下来就是更新和查询的线段树操作了,一开原创 2013-03-31 17:02:30 · 1281 阅读 · 0 评论 -
HDU 4614 Vases and Flowers(线段树)#by zh
这两天做比赛的状态实在是太差了,尤其是那天就睡了4个小时,早上到学校,下午就去做比赛了,什么题都不想写。其实就是个线段树,不过今天写了好久也没写出来,最近确实做题太少了,之前没有想到二分找点的位置,看了题解才知道,第一次二分还写错了,不过想了一下就调好了,其实还是挺简单的成段更新的线段树。#include #include #include using namespace std;#d原创 2013-07-26 22:54:18 · 734 阅读 · 0 评论 -
HDU 3695 Computer Virus on Planet Pandora(AC自动机)
做比赛的时候看这题就感觉是自动机,当时只是听说过有这个算法,但是根本没看过,晚上回去以后找教程看了一下复制了hh大神的模版,又自己敲了一下模版题,终于弄明白一点了,今天又做了一下F题这题和我做的那个模版题挺像的,不过就是多了反转以后的匹配和字符串的转换,其他的就是套模版而已。现在我也只能套模版,网上的英文教程看的云里雾里的,算了先搞个模版再说吧……#include #include #incl原创 2012-10-24 15:43:03 · 704 阅读 · 0 评论 -
POJ 1990 MooFest(树状数组)#by zh
这道题是给出直线上的一些点,每个点都有一个权值,现在要求记录每两个点之间的花费之和是多少,两点之间的花费是指这两个点权值的最大值乘以两点间距离。时间就给了一秒O(n^2)的算法肯定是不行的能优化的地方肯定是求和的部分,所以我们可以用树状数组来把复杂度优化到nlogn,但是当前要求的花费需要知道他的距离和权值才能确定。我们可以把数据都读入后按权值大小排序然后依次把每个点都加入树状数组中,现在只要求出原创 2012-10-22 17:00:27 · 586 阅读 · 0 评论 -
POJ 1875 Binary Search Heap Construction(treap)
这题是一个基础的treap题,就是把树建好然后中序遍历输出一下就好,但是我根本不知道treap是神马东西,查了一下发现treap就是一种同时满足二叉排序树和堆的性质的数据结构,也叫笛卡尔树。每个节点有两个值,一个代表关键字,一个代表优先级,主要操作有左旋和右旋,以保证treap满足其性质。这道题为了便于处理先把数据读入然后按关键字排序,然后每次都插入在前一个插入节点的右儿子处,如果不满足性质则进行原创 2012-09-04 14:22:37 · 1877 阅读 · 0 评论 -
POJ 1794 Castle Walls(逆序数)#by zh
这道题的题意还是比较简单的,有两队农民要把钩子扔到对面的城墙上然后爬上去攻城,每个人都有一个编号,城墙也有对应的编号,现在保证一个队伍中的人扔上去的绳子不可能交叉,问你有几对人的绳子相互交叉。做题前看这题是一个求逆序数的题还没一点思路,后来在网上看到了别人的思路才明白了一些。首先要把每个人的位置和对于城墙的编号读入,然后按照城墙编号升序排序,如果城墙编号相同,则按农民编号降序排列,这样通过构造农民原创 2012-09-27 17:31:40 · 1251 阅读 · 0 评论 -
POJ 2155 (二维树状数组) #by nobody
题目链接:http://poj.org/problem?id=2155code:#include #include using namespace std;#define lowbit(x) (x&-x)#define MAXN 1010int n;int c[MAXN][MAXN];void update(int x,int y){ for(int原创 2012-10-07 20:28:20 · 441 阅读 · 0 评论 -
POJ 1984 Navigation Nightmare(并查集坐标偏移)#by zh
这道题是一个并查集的高级应用,给你一些点之间的相对位置,然后有一些询问,询问的结果是返回两个点之间的曼哈顿距离。首先就要把所有数据都读入,再进行离线查询。因为查询时要求在上面的某一个关系之前,所以要把查询进行排序,记录结果的时候要保证以原来的顺序进行记录。针对排序后的查询,把符合要求的关系都加进去,就是把查询一下这两个点是否在一个集合中,如果在就不用再加了,如果不在那么就进行合并,顺便进行坐标偏移原创 2012-10-09 15:26:08 · 531 阅读 · 0 评论 -
HDU 4288 Coder(线段树或者暴力vector)#by zh
这题做网络赛的时候连看都没看,就听队友说了一下题意,算了一下暴力的复杂度超了,之前做过一道类似的题是用树状数组做的,因为树状数组不太熟悉而且感觉写网络流题更有把握一些,我们学校也只有一支队出了这道题,所以就没有管这道题。赛后找题解看到正解是线段树题,不过我又发现有人直接就用vector水过了,瞬间又给这题跪了,伤不起啊,下面贴一个STL水过的代码,线段树神马的,一会再研究……#include原创 2012-09-17 17:05:36 · 957 阅读 · 0 评论 -
HDU 4417 Super Mario(划分树)#by zh
比赛的时候看到这题有很多的查询操作,感觉就是道线段树题,果断用线段树写了,然后悲剧的TLE了……之后问过了的人才知道这题要用划分树写,然后二分第K大数才能过,不过我当时根本不知道划分树是神马,回来之后在网上找了个模版,套模版才A掉了这题,不过现在还是不明白这个数据结构的具体实现,晚上要研究一下#include #include #include #include using namespa原创 2012-09-24 14:02:20 · 697 阅读 · 0 评论 -
HDU 4267 A Simple Problem with Integers(线段树)#by zh
网赛的时候这题就不会做,现在有时间了又重新做了一下。由于我线段树做的本来就比较少,做这题的时候把题解看了半天也没看明白,后来通过问别人和自己想总算弄明白了。这题还是基于线段树的操作,但是在每个节点上要加一个额外的空间来表示有那些元素的值要增加,题目要求的是a到b区间中的,(i-a)%k==0的元素值要加c,那么就可以转化成i%k==a%k的元素,我们用add[i][j]来表示模k等于a%k的元素加原创 2012-09-26 14:36:41 · 515 阅读 · 0 评论 -
POJ 1988 Cube Stacking(带权并查集)#by zh
这道题在做之前看了一下题目的提示说是并查集,而且之前也做过很类似的题,想了一下也挺有思路的就直接写了,结果就因为一开始没看清楚题目说明导致数组越界RE了一次,改了一下就直接AC了,终于不用看题解就能写出来了,感觉又有点信心了。这题就需要维护每个点的两个权值,一个是栈底元素所在栈里面元素的个数,还有就是在每个元素下面元素的个数。每次更新的时候就找到两个栈底的元素更新一下权值然后执行合并操作。在查询的原创 2012-10-20 14:55:47 · 523 阅读 · 0 评论 -
POJ 2236 Wireless Network(并查集)#by zh
简单并查集,之前看错题了,样例都没跑对,后来发现查询的两台电脑必须都是修好的才行,如果不是就不用加到并查集里了,代码慢的一比,不知道哪里写挫了……#include #include #include #include using namespace std;int n,d;int pos[1005][2],pa[1005];bool repair[1005];int find(in原创 2012-10-30 23:54:14 · 958 阅读 · 0 评论 -
HDU 4612 Warm up(双连通分量)#by zh
之前只是听说过双连通分量,没有自己去写过,这次遇到了果断没有做出来,看题的时候算法是想到了的,奈何实在太挫了,写不出来。之前想用dfs找环再标记缩点,结果wa了,不知道怎么调就放弃了。今天看了一下Tarjan找桥和割点的方法还是比较简单的,当dfn[u]v是桥,然后标记一下,重新建图,求一个直径就好了。#pragma comment(linker, "/STACK:1024000000,10240原创 2013-07-26 23:00:24 · 695 阅读 · 0 评论