
ACM-数据结构
yew1eb
https://github.com/yew1eb
展开
-
数据结构之栈
复习一下。例题: 十进制转成八进制。 #include #include const int MAXN=1000;int n, N;int s[MAXN];//栈int StackEmpty(){ //判断栈是否为空的函数 if(n==0) return 1; return 0;} int StackFull(){//判断栈是否已满原创 2013-03-19 02:31:32 · 1549 阅读 · 0 评论 -
poj 2513 Colored Sticks,无向欧拉图的判定,Trie,hash
大致题意:给定一些木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的。原创 2014-08-19 10:58:17 · 1527 阅读 · 0 评论 -
poj2431 Expedition
http://poj.org/problem?id=2431load.....原创 2013-07-23 14:56:09 · 1766 阅读 · 0 评论 -
poj3253 Fence Repair
http://poj.org/problem?id=3253load......原创 2013-07-23 14:56:58 · 1601 阅读 · 0 评论 -
优先队列专题
都是在书上找的。。POJ 2051 Agri-Net POJ 2431 ExpeditionPOJ 3253 Fence RepairPOJ 2970 The lazy programmerUVA 11997 K Smallest Sums POJ2970 一直WA。。拿标程对拍了几个小时都没出来,想哭了。原创 2013-07-27 13:16:26 · 1706 阅读 · 0 评论 -
树链剖分 入门
专题练习:http://vjudge.net/vjudge/contest/view.action?cid=49482#overview原创 2014-07-13 08:32:28 · 1580 阅读 · 0 评论 -
SPOJ 3273 - Order statistic set , Treap
点击打开链接题意:集合S支持一下四种操作: INSERT(S,x) : 如果S中没有x,则插入xDELETE(S,x): 如果S中有x,则删除xK-TH(S): 输出S中第K小的数COUNT(S,x): 统计S中小于x的数有多少个一共有Q(1 ≤ Q ≤ 200000)次操作。Treap模板。。#i原创 2014-05-23 02:44:17 · 1992 阅读 · 0 评论 -
并查集专题
并查集专题练习(2013.07.28~) http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26995#overviewPOJ 1611 The SuspectsPOJ 1308 Is It A Tree?POJ 1182 食物链POJ 2492 A Bug's LifePOJ 1198 SolitaireP原创 2013-07-28 18:39:32 · 1673 阅读 · 0 评论 -
HDU 1213 How Many Tables,并查集
统计连通块的个数。。#include #define M 1001int p[M];int find(int x){return p[x] == x ? x : p[x]=find(p[x]); }int main(){ int T, n, m, i, x, y, count; scanf("%d",&T); while(T--){ sc原创 2013-03-26 00:30:51 · 1669 阅读 · 0 评论 -
LA3027 - Corporative Network,并查集
A very big corporation is developing its corporative network. In the beginning each of the Nenterprises of the corporation, numerated from 1 to N, organized its own computing andtelecommunication cent原创 2013-03-26 01:07:29 · 1796 阅读 · 0 评论 -
POJ2051 Argus
load……练习题:POJ 2051 Argus 我的代码原创 2013-05-02 23:25:01 · 2108 阅读 · 0 评论 -
POJ 2051 Arugs
ArgusTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 8585 Accepted: 3862DescriptionA data stream is a real-time, continuous, ordered sequence of items.原创 2013-05-03 11:45:29 · 2033 阅读 · 0 评论 -
POJ2970 The Lazy Programmer
s原创 2013-07-27 13:14:18 · 1963 阅读 · 0 评论 -
UVA 11997 K Smallest Sums
的原创 2013-07-27 13:21:48 · 1570 阅读 · 0 评论 -
poj3007 Organize Your Train part II, 字符串hash
题意:给定一个字符串,从任意位置把它切为两半,得到两条子串定义 子串1为s1,子串2为s2,子串1的反串为s3,子串2的反串为s4现在从s1 s2 s3 s4中任意取出两个串组合,问有多少种不同的组合方法#include #include #include #include #include #include #include #include #inc原创 2014-09-25 16:07:28 · 2251 阅读 · 2 评论 -
POJ 1988 Cube stacking
题意:有N(NM x y :表示把方块x所在的堆,拿起来叠放到y所在的堆上。C x : 问方块x下面有多少个方块。操作最多有P (P原创 2013-07-22 23:34:19 · 1837 阅读 · 0 评论 -
LA 3644 - X-Plosives,并查集
我擦,题目描述的太。。。思路:用一个并查集来维护图的连通分量集合,每次得到一个简单化合物(x,y)时检查x和y是否在同一个集合中。如果是,则拒绝,反之则接受。#include const int maxn = 100000 + 10;int pa[maxn];int find(int x){return pa[x] != x ? pa[x] = find(pa[x]) : x;}原创 2013-03-26 00:59:30 · 1826 阅读 · 0 评论 -
栈之括号匹配问题
栈(stack)是限制插入和删除只能在一个位置上进行的有序表,该位置是表的末端,即最后插入的元素的位置,叫做栈的顶(top)。栈的修改是按先进后出的原则进行的,因此,栈又叫LIFO(Last In First Out)表。栈有三种基本操作:进栈在栈顶增加一个元素。出栈把栈顶元素删除。取栈顶元素在不删除的情况下得到栈顶元素的值。另外很多实现可以完成一些其他的操原创 2013-03-20 02:40:12 · 1851 阅读 · 0 评论 -
链表
链表(Linked List) 单链表的操作: 1、查找第i个元素; 2、删除第i个元素; 3、在位置i插入一个元素。代码:#includeusing namespace std;#define ERROR -1#define OK 1struct Node{ int data; Node *next;};typedef int原创 2013-03-20 01:54:49 · 1636 阅读 · 0 评论 -
[转]Hufman树
转自:Tanky Woo 转载地址:http://www.wutianqi.com/?p=2848Huffman树,中文霍夫曼树或哈夫曼树,又称最优二叉树,是一种带权路径长最短的树。Huffman树的构建思想:1.从原始元素集合T中拿出两个频度最小的元素组成一个二叉树,二叉树的根为这两个节点频度的和。2.然后从集合T中删除这两个元素,把转载 2013-07-23 10:34:38 · 1773 阅读 · 0 评论 -
POJ2503-Babelfish (三种解法)
大致题意:输入一个字典,字典格式为“英语à外语”的一一映射关系然后输入若干个外语单词,输出他们的 英语翻译单词,如果字典中不存在这个单词,则输出“eh”。。1、直接使用map。。。。 938MS#include #include #include #include #include #include using namespace原创 2013-09-19 16:20:34 · 3281 阅读 · 0 评论 -
Data Structures@LightOJ
练习截止时间:2014-02-02(60天)Data Structures@LightOJ #01http://acm.hust.edu.cn/vjudge/contest/view.action?cid=38315#overviewData Structures@LightOJ #02http://acm.hust.edu.cn/vjudge/contes原创 2013-12-04 17:43:21 · 2041 阅读 · 0 评论 -
POJ2255-Tree Recovery 已知先序遍历和中序遍历求后序遍历
思路:1、前序遍历的第一个字母必是 根2、在中序遍历的字母串中找出 根字母,那么根字母左右两边的字符串就分别是它的左、右子树3、利用递归复原二叉树(把子树看作新的二叉树)4、最后递归后序遍历即可原创 2013-03-31 01:14:01 · 1747 阅读 · 0 评论 -
Uva 442 Matrix Chain Multiplication 栈
/*用栈,每次遇到右括号就把从左括号到右括号之间的部分全部计算。要在读取字符串的时候左边加一个左括号,右边加一个右括号。*/#include#include#include#include#includeusing namespace std;struct Type{ char a; int r,c;};Type matrix[30];stack s原创 2013-04-03 12:01:03 · 1976 阅读 · 0 评论 -
POJ 1611 The Suspects
http://poj.org/problem?id=1611题目大意:有n个学生(标号为0 to n-1),m个学生社团,给出每个社团里所有学生的标号,并假设0号学生患有SARS(社团里只要用一个学生患病,则整个社团里的学生都会被隔离),问最后一共会有多少学生被隔离?这是一个最基础的并查集的应用,扫描每一个社团,只要两个学生出现在同一个社团,则将这两个集合合并起来,最后输出原创 2013-07-22 12:02:44 · 1583 阅读 · 0 评论 -
并查集
不相交集:一组彼此没有公共元素的集合。并查集算法作用与一个不相交集,实际应用中可以在近乎常数的时间内完成下列两种操作: 查找(Find): 确定元素所在的集合。一般用来判断两个元素是否在同一个集合。 合并(Union): 将两个集合合并成一个集合。//查找://p[x]的值为x的父节点int find(int x) {return p[x] ==原创 2013-03-25 23:56:44 · 1696 阅读 · 0 评论 -
堆排序
堆排序算法开始时,堆排序算法先用BuildMaxHeap 将输入数组data[0...n-1]构造成一个最大堆。因为数组中最大元素在根data[0],则可以通过把它与data[n-1]互换来达到最终正确的位置。但是新的根元素可能违背了最大堆性质。这时调用MaxHeapify(data,0,size)就可以保持这一性质,在data[0...n-2]中构造出最大堆。对排序算法不断重复这个过程,堆的原创 2013-05-02 23:23:14 · 1927 阅读 · 0 评论 -
左偏树(可并堆)
左偏树(Leftist Tree)是一种可并堆外节点:是一个左子树为空或者右子树为空的节点节点的距离dist:为它到它子树内外节点的最短距离左偏树满足下面两条基本性质: [性质1] 节点的键值小于或等于它的左右子节点的键值 [性质2] 节点的左子节点的距离不小于右子节点的距离学习资料: 国外论文:http://www.dgp.toronto.ed原创 2014-02-17 20:15:23 · 2399 阅读 · 2 评论 -
poj 2985 The k-th Largest Group 求第K大数 Treap, Binary Index Tree, Segment Tree
题目链接:点击打开链接题意:有两种操作,合并集合,查询第K大集合的元素个数。(总操作次数为2*10^5)Treap模板(静态数组)#include #include #include #include #include const int maxNode = 500000 + 100;const int inf = 0x3f3f3f3f;struct Tr原创 2014-05-23 09:44:20 · 2310 阅读 · 0 评论 -
zoj2334 Monkey King , 并查集,可并堆,左偏树
提交地址:点击打开链接题意: N(N分析:涉及集合的查询,合并,取最值。 利用并查集和左偏树即可解决。#include #include #include #include using namespace std;const int maxn = 200000;int tot, v[maxn], l[maxn], r[maxn], d[maxn], f[原创 2014-07-13 10:15:37 · 2381 阅读 · 0 评论 -
poj 1840 Eqs , hash
a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 所有数的范围[-50,50]给出 a1, a2, a3, a4, a5的值,x1, x2, x3, x4, x5为变量,求这个方程有多少组解。可以先三重循环枚举x1,x2,x3计算前面三项的值sum1, count[sum1]++;然后二重循环枚举x4,x5计算后面二项的值sum2, an原创 2014-08-19 16:02:24 · 1504 阅读 · 0 评论