数据结构
文章平均质量分 51
asuxiexie
这个作者很懒,什么都没留下…
展开
-
poj 食物链
比基础的并查集有些进步。在下面这个链接中有详细解释:http://blog.csdn.net/ditian1027/article/details/20804911对于每两个动物的关系,都是先推与最终的关系,在逆推与另一个的关系;num中存的都是与最终节点的关系;#include#include#includeusing namespace std;const in原创 2014-07-17 16:13:17 · 803 阅读 · 0 评论 -
poj 2406 Power Strings KMP匹配
对于数组s[0~n-1],计算next[0~n](多计算一位)。考虑next[n],假设t=n-next[n],如果n%t==0,则t就是问题的解,否则解为1。这样考虑:比如字符串"abababab", a b a b a b a b *next -1 0 1 2 3 4 5 6 7考虑这样的模式匹配,将"ababa原创 2014-08-04 19:54:51 · 557 阅读 · 0 评论 -
hdu 4544 湫湫系列故事——消灭兔子 优先队列+贪心
将兔子的血量从小到大排序,箭的威力也从小到大排序,对于每只兔子将威力大于血量的箭加入队列,写个优先队列使得出来数位价钱最少。。#include#include#include#include#includeusing namespace std;const int maxn=100010;struct tt{ int d; int p; bool operator<原创 2014-07-14 20:10:01 · 779 阅读 · 0 评论 -
poj 1611 The Suspects
一道比最基础的并查集有优化的题;l 并查集的优化1、Find_Set(x)时 路径压缩寻找祖先时我们一般采用递归查找,但是当元素很多亦或是整棵树变为一条链时,每次Find_Set(x)都是O(n)的复杂度,有没有办法减小这个复杂度呢?答案是肯定的,这就是路径压缩,即当我们经过"递推"找到祖先节点后,"回溯"的时候顺便将它的子孙节点都直接指向祖先,这样以后原创 2014-07-14 16:58:59 · 679 阅读 · 0 评论 -
poj 2970 优先队列
就多个等于号纠结死先按di排序,(从小到大)。然后依次完成合同,若发现第i个合同无法在截止日期前完成,便从之前已经完成的任务中选一个aj最大的合同,付钱来使得这个合同尽快完成。#include#include#include#include#includeusing namespace std;struct node{ int q; in原创 2014-08-01 11:08:48 · 973 阅读 · 0 评论 -
UVA 1422 - Processor (二分+贪心+优先队列)
先对开始时间进行排序,在利用优先队列是结束时间早点先出队;因为时间只有20000,我们可以去枚举每个单位时间,看要给分配给那个任务,如果某个时间队列中还有结束时间大于枚举的时间,就跳出判断是在mid的右边。#include#include#include#include#include#include#includeusing namespace std;原创 2014-08-08 09:01:05 · 794 阅读 · 0 评论 -
uva 11374 最短路+记录路径 dijkstra最短路模板
UVA - 11374Airport ExpressTime Limit:1000MS Memory Limit:Unknown 64bit IO Format:%lld & %llu[Submit] [Go Back] [Status] DescriptionProblemD: Ai原创 2014-08-09 08:58:32 · 1161 阅读 · 0 评论 -
hdu 3336 Count the string(KMP)
一道应用kmp算法中next数组的题目这其中vis[i]从1加到nvis[i]=[next[i]]+1;#include#include#include#include#includeusing namespace std;char s[200005];int b;int next[200005];int vis[200005];void n原创 2014-08-08 09:00:26 · 628 阅读 · 0 评论 -
UVA 12124 UVAlive 3971 Assemble(二分 + 贪心)
先从中找出性能最好的那个数,在用钱比较少的去组合,能组出来就表明答案在mid的右边,反之在左边,#include#include#include#include#includeusing namespace std;map vic;//以字符映射数字int end,start;int num;int m,n;int sba,sbb;char na原创 2014-08-08 09:10:46 · 699 阅读 · 0 评论 -
UVA - 10917 Walk Through the Forest (最短路+DP)
题意:Jimmy打算每天沿着一条不同的路走,而且,他只能沿着满足如下条件的道路(A,B):存在一条从B出发回家的路径,比所有从A出发回家的路径都短,你的任务是计算有多少条不同的路径从后往前找最短路,对于每一步要更新之后走的位置值;#include#include#include#include#includeusing namespace std;const原创 2014-08-09 08:54:37 · 648 阅读 · 0 评论 -
poj 2492 A Bug's Life (并查集同食物链)
Language: DefaultA Bug's LifeTime Limit: 10000MS Memory Limit: 65536KTotal Submissions: 27157 Accepted: 8841DescriptionBackground Professor Hopper is re转载 2014-08-10 09:36:38 · 528 阅读 · 0 评论 -
HDU 1598 find the most comfortable road(并查集+枚举)
先把每条边的权值从大到小排序,在一个个枚举,利用并查集判断是否在一个集合中。。。#include#include#include#include#include#includeusing namespace std;const int maxn=205;const int maxm=1005;const int inf=(0x7f7f7f7f);#define min(a,b)原创 2014-08-12 09:47:45 · 577 阅读 · 0 评论 -
hdu 4857 逃生(优先队列+逆拓扑排序)
题意是给你一些关系,来进行排序,前面的那个人一定在后一个人前面,也在那些没有交钱的人的前面。。我们用逆拓扑排序,先把入度为零的数从大到小存入数组。然后就是一般的拓扑排序。。最后逆序输出#include#include#include#include#include#include#includeusing namespace std;int m,n;vector原创 2014-08-11 20:59:12 · 582 阅读 · 0 评论 -
hdu 2594 Simpsons’ Hidden Talents
题意是求第一个字符的前缀和后一个字符串的后缀最大的公共序列,并输出。。。将两个字符串合并,求出kmp中的next数组就行,但要注意不要大于某个字符串的长度;#include #include const int N = 50005;#define min(a,b) ((a)char s1[N], s2[N], s3[N * 2];int next[N * 2];原创 2014-08-04 17:31:26 · 616 阅读 · 0 评论 -
poj 2752 Seek the Name, Seek the Fame KMP
对于KMP算法中next函数的应用题意是对于一个字符串的前缀和后缀比较是否相等,再把相等的可能按字符串长度进行输出#include #include#includeusing namespace std;int len;int next[1000005];char s[1000005];int kmp_next(){ int i=0,j=-1;原创 2014-08-04 20:51:41 · 533 阅读 · 0 评论 -
hdu 1285 确定比赛名次 拓扑排序
第一道拓扑排序题。。拓扑排序就是一个有向图,如果这个图有环就不能用拓扑排序。对于拓扑排序就是将没有进只有出的点或别的先出。。出来后将原来图中与输出有关的线全部删除,直到找不到这要的点或数据。。#include#include#include#includeusing namespace std;int s[505][505];int a,b;int w[10原创 2014-08-05 17:17:13 · 551 阅读 · 0 评论 -
hdu 1251 统计难题
用到tire树;基础应用 这里讲的挺详细的 点击打开链接#include#include#include#define max 20using namespace std;char w[6];struct node{ bool a; int chile[26]; int q;//前缀 node(){ q=false;原创 2014-07-18 16:00:22 · 589 阅读 · 0 评论 -
poj 2503 Babelfish
一个简单的单词翻译的题,我是使用字典序做的;由于输入的问题 ,,WA,WA,,,都是泪;#include #include #include using namespace std;struct node{ int chile[26]; bool qq; char uu[11]; node() { qq=0;原创 2014-07-19 10:18:48 · 751 阅读 · 0 评论 -
hoj Counting the algorithms
贪心加树状数组给出的数据可能出现两种情况,包含与不包含,但我们从右向左删就能避免这个问题;#include#include#includeusing namespace std;const int maxn=200010;int f[maxn],l[maxn],a[maxn];long long tree[maxn];int n;inline int lowbit(int原创 2014-07-21 08:21:43 · 638 阅读 · 0 评论 -
poj 2352 Stars
题意就是一颗星星的左下方有多少颗星星就是几级;把每级的星星个数统计好输出就ok;但不能用二维树状数组,会超内存,,#include#include#include#define maxn 32001using namespace std;int a;int arr[maxn];int low(int x){ return x&(-x);}void u原创 2014-07-21 09:08:05 · 553 阅读 · 0 评论 -
hoj 经理的烦恼
简单树状数组;模板,,题目大意,给定N个商店,有初始商品数量.有两种指令,0 x y 表示x位置的商店的商品数量增加y1 x y 表示查询[x,y]区间内的商品数量为素数的商店的数目..这里更新的条件就变成去判断更新值是否从非素数变成素数或是从素数变成非素数..然后对树状数组进行更新..#include#include#includeusing namesp原创 2014-07-19 20:49:07 · 686 阅读 · 0 评论 -
hdu 1305 Immediate Decodability
用G++过了,c++无限WA就是一水,就是求输入的字符串中是否有一个是其他字符串的子串;注意这种数据。。。0000010019字符串的长度从大到小;#include#include#includeusing namespace std;char qq[20005];struct node{ int q[2]; int w; node原创 2014-07-21 11:06:14 · 712 阅读 · 2 评论 -
hdu 1556 Color the ball
基础 树状数组每输入一组数,就对染色次数进行修改;#include#include#includeusing namespace std;int s[100005],a;int low(int i){ return i&(-i);}void show(int q,int w){ while(q>0) { s[q]+=w;原创 2014-07-20 09:59:31 · 686 阅读 · 0 评论 -
hdu 1711 Number Sequence
直接套KMP模板#include#include#includeusing namespace std;int s[1000005],w[10005],next[10005];int b,c;void show(){ int i,j; i=0; next[0]=-1; j=-1; while(i<c) { if(j=原创 2014-07-21 19:47:15 · 465 阅读 · 0 评论 -
uva 699
我们可以把它直接考虑是个一维数组,对每个点向两边扩展,记录数据在数组中,就是DFS#include int a[81],left,right;void sort(int num,int pos){int x,y; if (num!=-1) {if (pos<left) left=pos; if (pos>right) right=pos; a[pos]+=num; s原创 2014-07-22 21:45:59 · 964 阅读 · 0 评论 -
poj2431 Expedition
直接代码、、、#include#include#include#include#includeusing namespace std;struct node{ int fuel,dist; //bool operator < (const node&d) const{ // return dist>d.dist; // }}s[10005];原创 2014-07-22 15:46:34 · 596 阅读 · 0 评论 -
UVA 127 Accordian'' Patience
题意:把一堆扑克牌,按照规则:如果左边1张或3张和它具有同花色或等级,把这张牌移到上面去,每次移动后,在从头开始移动,知道都移动完,输出剩余几堆与每堆牌数,如果1张牌有2个可以移动的地方,优先移动到左3位置。思路:用结构体存每一张牌,用栈来储存牌堆,每次判断能不能移动牌,每次移动后进行一次变换#include#include#includeusing namespace原创 2014-07-23 11:33:16 · 483 阅读 · 0 评论 -
hdu 4217Data Structure?
树状数组+二分就是找第几小的数,,找几次,再求和。。#include#include#include#include#includeusing namespace std;const int N=277777;int t,n,m,bit[N],num,i;long long ans;int low(int g){ return g&(-g);}void up原创 2014-07-24 17:06:02 · 679 阅读 · 0 评论 -
poj1035Spell checker
暴力解决。先把字典里的每个单词的长度存起来,在查找的时候,就比较长度,在多一个少一个之间找,#include#include#include#include#include#includeusing namespace std;char s[10005][20];char h[20];int w[10005],len;int show(int a){ int i,原创 2014-07-25 16:53:15 · 632 阅读 · 0 评论 -
hdu 1595 最短路
题意是要我们求出最短路中一条路坏的情况下最大的时间;我们先将最短路求出并记录路径,然后枚举最短路中每一条路坏的情况,求出最大的时间。。#include#include#include#include#includeusing namespace std;int s[1005][1005];int p[1005];int vist[1005];int q[1005];co原创 2014-08-14 17:01:11 · 760 阅读 · 0 评论