![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 68
纯属虚构
互联网后台开发大数据Linux
展开
-
并查集变形 - 敌人
给出一些敌人的队,如a -bc -da-c给他们分成两组,那么以上就可以分为a,d一组,bc一组。但如果敌人关系是这样的:a-bc-da-cb-c则a-b-c两两为敌人,这样就分不成两组了。现在就是给出这么一堆关系,让你判断是否可以分成两组。如何应用并查集呢?思路就是,用一个数组记录敌人的关系,这样可以O(1)时间内找到敌人。(1)初始化为-1(原创 2013-09-29 23:18:36 · 1625 阅读 · 0 评论 -
并查集简单模板
并查集解决的问题很典型,就是等价类划分的问题。三个函数:void init(int *p, int n){ for(int i=0; i<n; i++) p[i] = -1;}int Find(int x, int *pn){ if(pn[x]<0) return x; return pn[x] = Find(pn[x], pn);}// 合并:大的合原创 2013-09-29 21:38:33 · 716 阅读 · 0 评论 -
字符串循环移位 编程之美3.1
给定两个字符串s1和s2,要求判定s2能否能被s1做循环移位得到的字符串包含。例如,s1=AABCD,s2=CDAA,返回true,给定s1=ABCD,s2=ACBD,返回false。思路1:找出所有循环移位,逐个进行字符串匹配。n*字符串匹配的复杂度。kmp可以做到线性,因此总的复杂度为n^2.思路2:s1复制一下,变成s1s1,如s1=ABCD,变成ABCDABCD,用它进行匹原创 2013-10-04 12:47:51 · 1720 阅读 · 1 评论