数据结构
文章平均质量分 76
流風回雪_YZK
只盼来日登蜀道..
展开
-
Minimum Spanning Tree.prim/kruskal(并查集)
开始了最小生成树,以简单应用为例hoj1323,1232(求连通分支数,直接并查集即可)prim(n*n) 一般用于稠密图,而Kruskal(m*log(m))用于系稀疏图#include //prim n^2#include#includeusing namespace std;const int inf=0x3f3f3f3f;int a[102][原创 2014-01-25 18:35:48 · 795 阅读 · 0 评论 -
hdu 1811 ufset综合
好久没敲了,手生。题意:给一个图,要求是没有环,并且能从一点出发一笔画完所有点。定性判断出来。想恢复一下算法,判断矛盾用的强连通性的tarjan,不能确定用的模拟。#include#include#include#include#includeusing namespace std;int fa[30105]; int n,m; int ind[30028];int f原创 2015-03-18 21:15:36 · 681 阅读 · 0 评论 -
hdu1213
无聊,水水~。 uf-set#include#includeusing namespace std;int fa[1005];int find(int x){ if(x!=fa[x]) return find(fa[x]); return x;}int main(){ int n,m,T; cin>>T; while(T--) {原创 2015-03-18 11:15:57 · 647 阅读 · 0 评论 -
hdu 5044 树区间操作最后输出/ lca+dfs
题意:一棵树,俩种操作:1 有路径上的所有点加vi,2所有边加vi。 先离线求出所有询问的lca,再遍历询问一次,点+vi,lca-2*vi ,最后dfs从叶子扫上来一次,最后再祖先点补上即可。用了输入挂。复杂度(n+m).#pragma comment(linker,"/STACK:10240000000000,10240000000000")#include#include#in原创 2014-10-01 10:49:52 · 1315 阅读 · 0 评论 -
poj1330+hdu2586 LCA离线算法
整整花了一天学习了LCA,tarjan的离线算法,就切了2个题,DFS+并查集,利用深度优先的特点,回溯的时候U和U的子孙的LCA是U,U和U的兄弟结点的子孙们的LCA是U的父亲,结合每次询问,2586,求无相无环图,俩点距离,转化树(任意取一点为根),双向边保存,链式前向星保存边和权,DfS,先记录下每次询问,用链式前向星保存,双向保存,第(i+1)/2条边即为第i次询问(一次询问记为双原创 2014-02-07 19:14:39 · 890 阅读 · 0 评论 -
hdu4821 字符串 hash (bkdrhash)
题意: 给一个字符串,和m,l, 找出这样的子串: 长度为m*l, 由m个长度为l的串组成,每个串都不同。(s,size()字符串hash典例。 这里用的是bkdrhash 法。也是最常用的冲突最少的一种。原理:把字符串和数值对应。这里用base=31(一般用质数),先是扫一遍,处理处每个位子到结尾构成的串的hash值(倒过来的),然后长度为l的子串的haash值就好算了。之后枚举开头原创 2014-09-19 15:47:37 · 1241 阅读 · 1 评论 -
hdu 4970 树状数组 “改段求段”
题意:塔防。给1--n,给出m个塔,每个塔有攻击力,给出k个怪兽的位子和血量,问有几只可以到达n点。今天刚刚复习了树状数组,就碰到这个题,区间更新、区间求和类型。第三类树状数组可以斩。注意一下大数即可。#include#include#includeusing namespace std;__int64 tree1[100010],tree2[100010];原创 2014-08-20 22:20:33 · 851 阅读 · 0 评论 -
hdu3078 建层次树+在线LCA算法+排序
题意:n个点,n-1条边构成无向树,每个节点有权,Q次询问,每次或问从a->b的最短路中,权第k大的值,/或者更新节点a的权,思路:在线LCA,先dfs生成树0,标记出层数和fa[](每个节点的父亲节点)。在对每次询问,走一遍一次公共祖先路上的权,保持,快排。n*logn*q#include //187MS #include#include#includeusing原创 2014-05-15 17:08:21 · 1114 阅读 · 0 评论 -
hdu 1754 splay tree伸展树 初战(单点更新,区间属性查询)
题意:与区间查询点更新,点有20W个,询问区间的最大值。曾经用线段树,1000+ms,今天的伸展树,890没ms,差不多。第一次学习伸展树,一共花了2个单位时间,感觉伸展树真很有用,也很好玩。现在只学了一点点。切个点更新试试。大致思路:用编号(数组)作为树的键值建树,每插一个数,沿路节点更新最大值(每个结点有一个附加信息标记以之为子树的树所有点的最大值)。所以,查询时【i,j】,只要把i-原创 2014-07-22 15:32:33 · 1248 阅读 · 1 评论 -
HDU 1358字符串循环节问题 ,next数组
求字符串循环节,要求每前i个字符串前缀是否循环,有的话打印出来。我对j=next[i]数组(未优化,从0开始,第一个为-1,)理解:字符s[i]的前面的字符串,最长的相同的前缀和后缀的长度,因此,i+1-next[i+1]刚好是最小循环单位(如果next[i+1])(假设不是最小的,那么相同前后缀必然不是最大),而next[i+1]/(i+1-next[i+1])+1,是循环的个数(是原创 2014-04-07 21:03:41 · 840 阅读 · 1 评论 -
POJ 3080 多个串最长公共子序列
求多个串最长公共子序列,原创 2014-04-20 09:59:15 · 841 阅读 · 0 评论 -
hdu1251 字典树trie 模板题
//字典树模板题.题意:给一个库,每次查询,求以之为前缀的单词数量。#include#include#include#include#includeusing namespace std;int tree[500000][27];int w[500000]; //记录结点属性。int numv=0; // 全局变量,原创 2014-03-25 21:39:12 · 832 阅读 · 0 评论 -
POJ 3461 kmp 应用
题意:求匹配串在文本中出现次数,KMP应用,理解了就OK了,每次匹配成功就累加次数,开始的时候超时,由于在处理每次成功的时候让i=i-len2+1,相当于回溯了,后来一想,本次成功,相当于“失败”,i不动,j需要用哪里来匹配?当然是next{j}!嘛(此处j=len2)。第一次真正敲kmp,完全根据自己理解敲出来的总控。#include //用string 220ms,ch原创 2014-04-19 11:07:07 · 716 阅读 · 0 评论 -
POJ2752 NEXT[J]特性应用利用。
题意:求一个字符串所有的前缀和后缀相同的情况,每个情况输出长度,如 ababcababababcabab :2 4 9 18思路:next数组应用,利用j=nxet[i],i之前与开头相同的字符串长度,每求一次next[j],可得一次答案,反复求即可,逆序输出。#include //1A,172MS#include#includeusing namespace std;原创 2014-04-19 10:01:03 · 691 阅读 · 0 评论 -
poj2513字典树+欧拉图判断+并查集断连通
题意:俩头带有颜色的木棒,要求按颜色同的首尾相连,可能否?思路:棒子本身是一条边,以俩端为顶点(同颜色共点),即求是否有无向图欧拉路(每条棒子只有一根,边只能用一次,用一次边即选一次棒子)。先判断图是否连通,并查集判断即可,有fa[i]==i的,表示“根”,连通图只能有一个这样根,大于1不连通。在判断欧了图是否存在,度权为偶数或者只有2俩奇数为欧拉图,否则不是。未1a原因:原创 2014-03-27 20:00:04 · 786 阅读 · 0 评论 -
安大校赛,“聪明的输入法”,字典树+树上状态记录
题意:每次询问:输出当前自库中以之为前缀的字符串频率最大的(相等时字典序最小)的字符串。此题开始就跪,字典树不是问题,关键是解决每次输出就是把这个串在字典树跑了一遍之后(停在某节点node),输出以node为根节点的子树中的权值最大的“终止节点”,这个问题,开始走w[u]最大的,发现不行啊(反例很多),后来发现,给每个结点加一个状态,记录以它为根的子树中,权最大的串,(当然还有权值),,原创 2014-03-27 16:34:14 · 784 阅读 · 0 评论 -
poj1308+HOJ1325,判断是否为树
POJ 应该是判断是否为简单无环连通图,用并查集直接秒杀即可,而HOJ的是有向树,还需判断所有点的入度必需小于2,用一个类似hash【】数组判断一下即可, ////判断树之一:入度#include //判断是否是树 0MS#include#includeusing namespace std;int fa[100001];int mark[100001];原创 2014-01-28 16:50:31 · 750 阅读 · 0 评论 -
hdu1875kruskal简单应用。
标记是dificulty 2,水,开始kruskal时练手题,只需开始时数据处理下,不符合要求的边不要,要理解并查集和Kruskal,就简单了,判断下是否联通图,(只需在记加入有效边时候统计连通分支数即可),生成树必是n-1条边,有效加入次数为n-1次,少与之便不连通了,在杭电总能1A。。。在POJ从未1A。。。。#include#include#include#include#inc原创 2014-01-25 20:46:34 · 716 阅读 · 0 评论 -
hdu5945 bc#89 dp+单调队列优化
简单题。很久没写题目了,今天一打,果然手生。单调队列都不会写了。(一年没更新了)题意:一个数字x,每次俩种操作选一种:1,如果能被k整除,可以x=x/k, 2 .x=x-j (j=0,1,2,,,,t) ,求使得x=1的最少操作步数,题目保证有解。解:if(j%k==0) dp[ j]=min(dp[j],dp[j/k]+1) or dp[j]=min(dp原创 2016-10-30 21:31:18 · 367 阅读 · 0 评论