数据结构
Ice_Crazy
目前等级:资深菜鸟 。下一等级:超神菜鸟
展开
-
hdu1866
/*分析: 有点儿无语了。。。这读入可能有空格呀什么的,所以不能用scanf,得用gets,这个可以理解。 但是!!!我就弄不明白了,怎么主循环写成for(i=0;str[i];i++),就WA,而必须写成“len=strlen(str);for(i=0;i别么?WA了一个多小时,就试出来了这个。 这次真心不明白了,还请懂的牛牛留个言,谢谢了T^T原创 2013-04-29 15:14:39 · 1321 阅读 · 2 评论 -
hdu1272
/*分析: 三点: 1、读入过程中,合并集合的时候,如果,当前读入的两个 元素属于同一个集合,那么肯定是No~; 2、不要忘了最后要判断所有的点都要是连通的哦~不能有 孤立的; 3、读入只有0 0的时候,要输出Yes。。。 数据水,房间编号可以是10W,以为要用链表来储存集合来着,没想到就原创 2012-07-11 17:40:33 · 1920 阅读 · 0 评论 -
hdu2094
分析: 其实,我觉得,这题应该用并查集的,当所有的flag都指向同一个目标的时候,冠军就诞生了,冠军就是目标。 但是。。。 用并查集写出来竟然WA了? 倒是从网上看了看,只要符合没有被击败过的人的人数==1,那么就输出Yes。 按照这个思想写,过了- -I。 But。。。明显不对呀- -I。 反eg:A击败B,B击败C;同时有:D击败E、E击败F、F击败D。 后者是个循环么,根本原创 2012-04-14 00:04:47 · 2175 阅读 · 4 评论 -
hdu4424
/*分析: 并查集(2012长春现场赛E题)。 蛋疼的再次爆栈了,囧~~ 意外的在Statistic排了第一耶,625MS。太意外了,囧~~~ 很巧妙的想法,由于路径的容量只与最小边有关,所以把边从大到小排序,然后并查集,合并两个集合的时候取max,就行了。原创 2012-10-24 09:59:23 · 1292 阅读 · 0 评论 -
hdu1829
/*分析: 并查集。 我郁闷了,哪里说每组测试后要输出一空行的? 思路不是自己的…… 路漫漫其修远兮~~~ 继续努力吧。。。 2012-07-16*/#include"stdio.h"#include"string原创 2012-07-16 15:26:31 · 1907 阅读 · 0 评论 -
hdu1856
/*分析: 并查集。 这题……真无语,本来想着TLE、MLE了再优化,这代码只是试试的,没想到……这都93MSac了?!才用1200+K的内存,数据明显水嘛,那给那么大的范围干什么啊,还以为要离散化什么的辅助优化的……我晕了…… 不过,1a挺好~ 20原创 2012-07-16 10:11:36 · 1083 阅读 · 0 评论 -
hdu3097
/*分析: 并查集。 仔细想想,对于一个连通的集合,如果边的数目为偶数,则必定可以按照题中所说的方式成功划分;否则,必定不行囧~。 2013-04-09*/#include"iostream"#include"cstdio"#inc原创 2013-04-09 20:57:29 · 828 阅读 · 0 评论 -
hdu3367
/*分析: 刚开始没读懂题,觉得好难好难。。。 后来读懂了,晕了。。。 - -,由大到小排序,Kruskal、同时标记环的情况。 网上有详细解释,我就不废话了。 2012-08-01 14:01*/#include"stdio.h"#includ原创 2012-08-01 13:57:47 · 1060 阅读 · 0 评论 -
hdu1325
/*分析: 并查集,水水更健康~ 2012-07-16*/#include"stdio.h"#include"string.h"int set[1011];int indegree[1011];struct A{ int s,e;}E[10011];voi原创 2012-07-16 16:29:08 · 1712 阅读 · 0 评论 -
hdu2860
/*分析: 并查集。 当要合并的两个公司x、y有关系x==y时,输出Reject。。。... 2013-03-28*/#include"iostream"#include"cstdio"#include"cstring"usi原创 2013-03-28 15:24:50 · 841 阅读 · 0 评论 -
hdu2473
/*分析: 学会了并查集的删除操作,找个点顶替要删除的点,就行了。 2012-07-17*/#include"stdio.h"#include"string.h"int extra;struct A{ int pre; int rep;}E原创 2012-07-17 11:31:48 · 1448 阅读 · 0 评论 -
hdu3047
/*分析: 并查集,记录每个点到根的顺时针距离就行了。 2012-07-17*/#include"stdio.h"struct A{ int pre; int dis;}E[50055];void build(int n){ int i; for(i=原创 2012-07-17 18:50:18 · 1151 阅读 · 2 评论 -
hdu2222
/*分析: AC自动机的果题。 好久么有怎么学新算法了,这两天看了点儿新算法。ac自动机去年就接触了囧~~,不过一直没有看。今儿下午下课后看了下,也敲了下,还行吧,除了因为几天么有怎么敲题而犯2的在一处很easy的地方wa了一次,其它都还行。 模板题,网上有很多ac自动机的课件呢,其它废话咱就不多说了囧~原创 2013-04-08 19:24:39 · 2472 阅读 · 0 评论 -
hdu2651
/*分析: 水题,把每个读入的串,根据相邻字母重复次数,构成一个新的串。 我这个用了字典树,也可以不用,直接把所有构成的串排一下序,然后就可以计算了。 2013-01-26*/#include"stdio.h"#inc原创 2013-01-26 18:27:23 · 766 阅读 · 0 评论 -
hdu3999
/*分析: 又是一个月黑风高的夜晚,终于。。。又可以刷题了,囧~,十几分钟就能敲完的代码,白天愣是被打断了3、4次,终于敲完了。。。 水~ 其实就是把这个树构成,然后遍历一遍输出,遍历顺序就是先root、然后左子树、然后右子树。 我这个建树的思想来自写的字典树,所以就分类到字典树里面了。囧~~原创 2013-01-22 22:11:05 · 1123 阅读 · 0 评论 -
hdu1711
/*分析: KMP果题,没什么好说的。 2012-09-13*/#include"stdio.h"#include"string.h"#include"stdlib.h"int n,m;int next[10011];int a[1000111];int b[10011];原创 2012-09-13 16:18:27 · 2013 阅读 · 0 评论 -
hdu2594
/*分析: KMP水题。 菜菜的第一道KMP题,next是学KMP学到的,其它自己敲的,1a~,happy~O(∩_∩)O~ 2012-09-10*/#include"stdio.h"#include"string.h"int nex原创 2012-09-11 12:17:24 · 1204 阅读 · 0 评论 -
hdu3460
/*分析: 两个方法: 1、建立字典树:ans=2*节点数+n(因为要输出n次)-最长链长度。用贪心的想法想局部,然后跳出来全局看,就得到这个结论了; 2、将所有的单词按字典序排序,然后遍历; 前者;62MS,29688K(中途释放的话会小很多很多),1091B 后者:31MS,736K,628B 下面是前者的代码原创 2012-07-05 19:59:02 · 852 阅读 · 0 评论 -
hdu1247
/*分析: 感谢Lelouch的帮忙O(∩_∩)O~ 另外…… ac后,我最想说的是……:我……靠!!!数组竟然才开5000?!!!WA了4次并且WA了快两天都没有发现?!!!第一次就开对,就1a了!!! - - 再犯这种低级错误,这条道儿……就不用混了…… 很easy的字典树,就不废话了原创 2012-07-04 19:10:32 · 1743 阅读 · 2 评论 -
hdu2144
/*分析: 简单并查集。 时间给的挺宽裕的,所以可以暴力。貌似正统的方法后缀自动机,等会了再写一遍吧。。。 2013-04-21*/#include"iostream"#include"cstdio"#include"cstring"usin原创 2013-04-21 19:39:53 · 1369 阅读 · 0 评论 -
hdu2818
/*分析: 并查集。 我自己写的是向上和向下两个并查集和起来完成这个题的,有点儿麻烦就不贴了,下面是参考别人的,只单纯向下并查做的。 2013-02-28*/#include"stdio.h"#include"string原创 2013-02-28 16:54:27 · 877 阅读 · 0 评论 -
hdu2545
/*分析: 简单并查集。 在网吧夜市刷题,桑不起呀,囧囧囧~~~ 2012-11-19*/#include"stdio.h"#include"string.h"#define N 100011int n,m;in原创 2012-11-19 01:44:52 · 689 阅读 · 0 评论 -
hdu3635
/*分析: 并查集路径压缩的果题,一开始读错题,竟然想了两天?!!! 我英语有这么菜么?,再这样弄,我就可以退出这条道儿了……让我s吧。。。。。。。。。。。。。。。 2012-07-17*/#include"stdio.h"struct A{原创 2012-07-17 20:43:38 · 1142 阅读 · 1 评论 -
hdu2836
/*分析: (树状数组(或线段树)&&二分)&&DP。 还是太水了,犯了一个很2的错误,想了一天。。。 将high从小到大排序,然后,按照《输入顺序》对n个数据进行循环求解,用二分找到在排过序的序列中的状态可以推过来的数据的左右临界,则DP[i]=SUM(DP[j])+1(aa、b为左右临界。遍历后,求SUM(DP[i])-n(去掉只有一个节点的路原创 2013-03-12 18:35:50 · 1231 阅读 · 0 评论 -
hdu3756
/*分析: 三分水题。 是我想多了,cal的暴力部分不会TLE,囧~ 2012-12-21*/#include"stdio.h"#include"string.h"#include"stdlib.h"#include"m原创 2012-12-21 15:53:38 · 955 阅读 · 0 评论 -
hdu3660
/*分析: 简单的tree dp,难点是理解题意。。。 从下往上dp,如果是奇数步,就记录这个点往下可以得到的在[L,R]内的最大的dis;如果是偶数步,就相反。 2013-06-26*/#include"iostr原创 2013-06-26 11:11:28 · 1130 阅读 · 0 评论 -
hdu4514
/*分析: 不难,也不算果水,不过还是贴一下吧,不枉我晚上两点了在水题。。 并查集判环 + tree dp。 先用并查集判断每个集合是否有环,有环YES无环继续; 继续:无环,所以每个集合都是一个tree么,那么是tree就好办多了。、、dfs,则dis_max=max(dis_max,max(deep,dis[son_tree1]+dis[so原创 2013-06-27 10:34:31 · 1426 阅读 · 0 评论 -
hdu4374
/*分析: 优先队列+DP。 不科学&&蛋疼、加了一个精心想好的优化结果wa了一下午、去掉就ac了。。。不过内存占用不算多、648K。 很容易想到dp[i][j]=max(dp[i-1][k]+sum(k~j))(abs(k-j)列j每次改变、每个可进行递推的点k到点j的sum(k~j)都在变化、不好处理;所以改变下: 假设k原创 2013-07-16 20:26:59 · 1274 阅读 · 0 评论 -
hdu4339
/*分析: 线段树水题。 被小坑了一下、没有说两个串长度一样呢囧~ 我维护的是:该区间内、从左端点开始往右能在对应相等的前提下所延伸的最长长度。 2013-07-17*/#include"iostream"#include"cstdio"原创 2013-07-17 20:15:25 · 962 阅读 · 0 评论 -
hdu4004
/*分析: 二分,水。。题。竟然ac了、着实捏了一把冷汗、1Y。。。 读完题后直接就想到二分了、不过看了数据范围后、感脚数据如果够强大的话、是过不了滴。。当然、关键的系事实证明它咩有那么强大囧~~(不过看到那个L的范围后直接就被雷到了、虽然acm里面不是第一次了、不过哪只蛤蟆经得起这样折腾的。。)原创 2013-07-03 20:03:38 · 1640 阅读 · 0 评论 -
hdu2874
/*分析: LCA,我这个用的是Tarjan离线的,不懂的可以看lrj的黑书,在讲树的部分讲到的。 以前写过这个题,记得当时莫名其妙的tle了= =。。 2013-06-14*/#include"iostream"#include"cstd原创 2013-06-14 19:12:58 · 2569 阅读 · 3 评论 -
hdu4193
/*分析: 数据结构的分析类问题。 觉得是道挺有意思的水题,本来没想发,不过随便搜了下后发现清一色的单调队列。。应该很快也要退役了,还是发下吧。。 这里说的移动,都是将最后一个元素放到首位。 1.如果sum 2.很容易发现一个性质,如果当前的长度为n的序列满足题中的那个条件,那么我们可以只将最后一个元素移动到最前面;既将最后的元素放到首原创 2013-08-01 08:25:02 · 1747 阅读 · 0 评论 -
hdu 树状数组小集(中低难度)
源自------------------------------------------------树状数组水题果题模板题:hdu3792、hdu1541、hdu4046、hdu2689hdu2838 树状数组求逆序数果题。hdu2433 树状数组求顺序数,不错的题。 sum[i~j]=val[i]+va原创 2013-08-01 10:13:44 · 2913 阅读 · 0 评论 -
hdu4614
/*分析: 就一线段树果题,配合二分,或者把对e点的查找的函数写的复杂点儿、在里面嵌套半个logn都行。 这是我最喜欢的几个算法之一啊!只是这段时间有点儿忙不小心冷落了你,不要就这么狠心无情毅然决然果断地抛弃我啊!!犯了白痴错误比赛期间愣是没有检查出来啊!!心酥了有木有啊囧~~原创 2013-07-26 11:52:38 · 1816 阅读 · 0 评论 -
hdu4632
/*分析: (找规律+递推) && (线段树 || 树状数组),非区间dp方法。 以后都不准备再贴水题了,不过这题我比赛时想到的方法和解题报告的方法不一样,所以贴下。。。 1. 经过观察,发现性质:对于str[i]==str[j] && i(i列,并且这个回文序列的首元素为str[i]、尾元素为str[j]; 2. 维护两个数组,ans[N原创 2013-08-02 12:49:23 · 1673 阅读 · 0 评论 -
hdu3630
/*分析: 二维RMQ+二维树状数组(或者二维线段树)。 对于所求的区域内、以每一个非lake点所在行为底部、先向上使劲儿扩展、然后再努力向两侧扩展、可以得到一个不含lake的矩形。枚举出所有的这种矩形(必定涵盖ans情况)、最佳的既为ans。n*m*q次枚举、RMQ询问O(1)、二维树状数组求和log(n)*log(n),所以时间复杂度为O(n*m*q*log原创 2013-07-02 09:21:34 · 829 阅读 · 0 评论 -
hdu4190
/*分析: 实在想不出来啥好方法,上网一查,二分?! 好吧,暴力二分吧。 312MS。 2012-07-31 20:56*/#include"stdio.h"int MAX(int a,int b){ return a>b?a:b原创 2012-07-31 20:52:33 · 1011 阅读 · 0 评论 -
hdu4022
/*分析: 快排+二分。 2012-10-13*/#include"stdio.h"#include"string.h"#include"stdlib.h"struct A{ int x,y,index;}x[100011],y[100011];int hash[100011];i原创 2012-10-13 17:34:44 · 991 阅读 · 0 评论 -
hdu2141
/*分析: 二分。 输入有三个集合,要先合并两个为一,然后再对这个合并出来的集合进行二分;否则不合并的话,直接用双层for嵌套一个二分,会TLE的。 前者最坏情况:T*(25W+500*18*1000); 后者最坏情况:T*(1250W*10*1000),显然TLE。 具体时间复杂度很简单,就不写了-、-原创 2012-09-07 11:11:40 · 1983 阅读 · 0 评论 -
hdu2289
/*分析: 二分。当r==R的时候,直接算的竟然不行,一定要用二分,Why?! 2012-05-11*/#include"stdio.h"#include"math.h"const double P=3.1415926535898;原创 2012-05-11 20:00:28 · 1048 阅读 · 0 评论