摘要:
在图论中,匹配是指两两没有公共点的边集。二分图的最大匹配是这样的:给出一个二分图,找到一个边数最大的匹配,即选尽量多的边,使得任意两条选中的边没有公共点。如果所有的点都是匹配点(匹配中的某一条边的端点),则称这个匹配是完美匹配(perfect matching)。下面我们考虑二分图都是联通图,如果是... 阅读全文
摘要:
用染色法判断二分图是这样进行的,随便选择一个点,1.把它染成黑色,然后将它相邻的点染成白色,然后入队列2.出队列,与这个点相邻的点染成相反的颜色根据二分图的特性,相同集合内的点颜色是相同的,即但是如果这个图不是二分图,那么就会这样把与1相邻的点2,3染成白色,然后入队列,然后2出队列,要把与2相邻的... 阅读全文
摘要:
----- 有时候如果枚举起点超时,那么试试枚举终点。枚举每一个i为终点(0i内相同字母的个数不超过k1 while(true)2 {3 cnt[str[startPos]] --;4 if(str[startPos] == str[i])5 break;6 startPos++;7 }8 st... 阅读全文
摘要:
dp[i][j] 表示以i结尾的长度为j的递增子序列dp[i][j] = sum(dp[k][j]) ka[j]如果只是单纯的循环for(j=2; j a[j]) dp[i][j] += dp[k][j-1];时间复杂度是O(n * n * m) TLE但是k循环可以用树状数组来优化,... 阅读全文
摘要:
给定一个区间,如果要频繁修改该区间内的元素,且频繁查询该区间内任意小区间的元素之和时,可以用树状数组。普通的一次修改时间复杂度是O(1),而查询的时间复杂度是O(n). 树状数组的修改和查询的时间复杂度均为O(logn)给定区间1-->n,区间内对应的元素为a[i] (1 = 1) 5 {... 阅读全文
摘要:
当要求递推数列的第n项且n很大时,怎么快速求得第n项呢?可以用矩阵快速幂来加速计算。我们可以用矩阵来表示数列递推公式比如fibonacci数列 可以表示为 [f(n) f(n-1)] = [f(n-1) f(n-2)] [ 1 1 ] [... 阅读全文
摘要:
行列式的每一项乘积都是由行列式位于不同行且不同列的数构成的所以一共的n!项a1j1a2j2a3j3…anjn其中1--->n表示来自第几行,而j1j2j3…jn表示1,2,3的一个排列(列数的排列)当j1j2j3…jn为偶排列时,对应的项取正号,为奇排列时,对应的项取负号 阅读全文
摘要:
1,2,3...,n这n个数字组成的一个有序数组称为一个n级(阶)排列,共有A(n,n)=n!个不同的排列。在一个n阶排列中如果较大的数排在较小的数的前面,,则称这两个数构成一个逆序.一个排列中的所有逆序的总和叫做这个排列的逆序数。逆序数为奇数的排列叫做奇排列,逆序数为偶数的排列叫做偶排列特别的,自... 阅读全文
摘要:
方程ax + by = c是否有解,当且仅当c是gcd(a,b)的倍数时,方程有解(根据数论中的贝祖定理)。设t = c / gcd(a,b), 我们可以用扩展欧几里得求出方程ax + by = gcd(a,b)的一组解(x1,y1)那么方程ax + by = c的一组解是(tx1,ty1) 设为... 阅读全文
摘要:
1 /* 2 1.对n个字符串构造tire树 insertWord(node *root, char *word); 3 2.bfs构造fail指针 makeFail(node *root); 4 3.基于... 阅读全文