IT民工
加油!
上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 29 下一页
摘要: 给出一个字符串A,求A有多少个前缀同时也是后缀,从小到大输出这些前缀的长度分析:KMP对于长度为len的字符串,由next的定义知:A[0]A[1]...A[next[len]-1]=A[len-next[len]]...A[len-1]此时A[0]A[1]...A[next[len]-1]为一个符合条件的前缀有A[0]A[1]....A[next[next[len]]-1]=A[len-next[next[len]-next[next[len]]]...A[next[len]-1],故A[0]A[1]....A[next[next[len]]-1]也是一个符合条件的前缀故从len=>n 阅读全文
posted @ 2012-08-01 16:55 找回失去的 阅读(190) 评论(0) 推荐(1) 编辑
摘要: 用KMP求循环节。/*Accepted 5288K 110MS G++ 712B 2012-08-01 16:03:19*/#include<stdio.h>#include<string.h>#include<stdlib.h>const int MAXN = 1 << 20;char t[MAXN];int next[MAXN], len;void Make_Next(){ int i = 0, j = -1; next[0] = -1; len = strlen(t); while(i < len) { if(-1... 阅读全文
posted @ 2012-08-01 16:10 找回失去的 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 字符串模式匹配,KMP算法相当高效,O(n+m)。关键在求出模式串的next数组,求完这个,一些基本的题应该都是没有问题了的,文本串只要扫描一次。求模式串在文本中出现的次数,当匹配模式串的最后一个字符时,就说明出现了一次。/*Accepted 1192K 94MS C++ 987B 2012-08-01 09:21:25*/#include<stdio.h>#include<string.h>#include<stdlib.h>const int MAXT = 1000100;const int MAXW = 10010;char T[MAXT], W[MA 阅读全文
posted @ 2012-08-01 09:29 找回失去的 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 这道题是字符串的简单题,主要是为了熟悉四个函数的用法:strcpy:字串复制 原型:char*strcpy(char*dest,char*src); 功能:把src所指由'\0'结束的字符串复制到dest所指的数组中。strncpy:字串复制原型:char*strncpy(char*dest,char*src,size_tn); 功能:将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样只有遇到NULL才停止复制,而是多了一个条件停止,就是说如果复制到第n个字符还未遇到NULL,也一样停止),返回指向dest的指针。函数名:strstr 函数原型:ex 阅读全文
posted @ 2012-07-31 11:43 找回失去的 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 大顶堆和小顶堆。/*Accepted 624K 157MS C++ 906B 2012-07-30 17:18:34*/#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#include<queue>using namespace std;const int MAXM = 30030;int n, m;int a[MAXM];int main(){ while(scanf("%d%d", &m, &n) == 2 阅读全文
posted @ 2012-07-30 17:24 找回失去的 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 题意很容易弄懂,就是找到割点,以及割点连接的强连通分量的个数,简称连通数。用tarjan来求,假设1为根结点,则连通数为0。其他点假设连通数为1。根据下面的定义来求。if(low[pnt[i]] >= dfn[cur]) sub[cur] ++;【割点】在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。当割点集合的顶点个数只有1个时,该顶点就是割点。此时,我们可以得到割点的定义如下:若有k的儿子为i,我们定义AnceDeep[i]为结点i辈分最高(深度最浅)的祖先的深度,deep[k]为k的搜索深度 阅读全文
posted @ 2012-07-30 15:59 找回失去的 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 求图的底,就是找出经过缩点后的图中出度为0的点,每个点中的元素就是图的底。然后有序输出,不要多输出空格。将tarjan算法敲的比较熟了。/*Accepted 468K 47MS C++ 1864B 2012-07-30 14:44:59*/#include<cstdio>#include<cstring>#include<cstdlib>const int MAXN = 5050;const int MAXM = MAXN * MAXN;int first[MAXN], next[MAXM], v[MAXM], cnt, top, col, e, N, M, 阅读全文
posted @ 2012-07-30 14:51 找回失去的 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 转自scameeling的空间http://hi.baidu.com/scameeling/item/b135831094ec756771d5e815强连通分量 Kosaraju PK TarjanKosaraju算法对每个不在树中的点开始DFS一次,并记录离开各点的时间,这里是离开的时间,而不是到达时的,比如有图1->2 2->3 则1,2,3分别对应的时间是3 2 1,因为3没有出边,所以最先离开,其次是2,最后是1,DFS后,在同一棵树中的点,如果dfn[v]>dfn[u]则说明点从v有可能到达u,而这棵树中的dfn[]最大的点,肯定可以到达每个点,从而在原图的逆图中, 阅读全文
posted @ 2012-07-30 14:13 找回失去的 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 这道题求被其他牛欢迎的牛的个数。原图是一个有向图,将其缩点后,每一个强连通分量是一个点,找出出度为1的点的个数,如果大于1,那么无解。如果等于1,则输出这个强连通分量中点的个数。/*Accepted 736K 110MS C++ 1999B 2012-07-30 11:49:48*/#include<cstdio>#include<cstring>#include<cstdlib>const int MAXN = 10010;const int MAXM = 50050;int first[MAXN], next[MAXM], v[MAXM], cnt, t 阅读全文
posted @ 2012-07-30 11:57 找回失去的 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 先将图用tarjan缩点,形成无环图。然后求出其中入度为0和出度为0的点的个数ans1和ans2。然后根据题意,入度为0的点需要添加一条边,所以第一问的结果就是ans1。这里的点都是图的缩点。第二问取ans1和ans2大的那个。因为我们先将入度为0的点和出度为0的点连接是最省的,剩下有点的话也得连接,所以是两者的最大值。http://hi.baidu.com/scameeling/item/b135831094ec756771d5e815强连通分量tarjan的介绍/*Accepted 192K 0MS C++ 2109B 2012-07-30 10:53:03*... 阅读全文
posted @ 2012-07-30 11:07 找回失去的 阅读(152) 评论(0) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 29 下一页