自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 网络流-最大流算法

《图论及应用》ACM-ICPC程序设计系列Ford-Fulkson方法的基本思想(1)初始化网络中所有边的容量,C继承该边的容量,C初始化为0,其中边即为回退边。初始化最大流为0.(2)在残留网络中找一条从源S到汇T的增广路P。如能找到,则转步骤3;如不能找到,则转步骤5.

2016-08-31 19:26:07 482

原创 边覆盖、边独立集

【边覆盖】所谓边覆盖集E*,就是G中所有的顶点都是E*中某条边的邻接顶点(边覆盖顶点)极小边覆盖:若边覆盖E*的任何真子集都不是边覆盖,则称E*是极小边覆盖。最小边覆盖:边数最少的边覆盖集称为最小边覆盖。边覆盖数:最小的边覆盖所含的边数称为边覆盖数。【边独立】边独立集:设无向图为G(V,E),边的集合E*属于E,若E中任何两条边均不相邻,则称E*为G的边独立集,也称E*为G

2016-08-30 21:14:31 1512

原创 点支配、点覆盖、点独立

支配与支配集:设无向图为G(V,E),顶点集合V*属于V,若对于任意v∈(V-V*),存在一个u∈V*,使得(u,v)∈E,则称u支配v,并称V*为G的一个点支配集。通俗的讲,V-V*中的每个顶点都是V*中某个顶点的邻接顶点,或者说V中的顶点要么是V*集合中的元素,要么与V*中的一个顶点相邻。极小支配集:若支配集V*的任何真子集都不是支配集,则称V*是极小支配集。最小支配集:顶点数最少

2016-08-29 20:21:34 2550

原创 polya

1/|G| {m^c(a1)+m^c(a2)+m^c(a3)+...+m^c(ag)}其中c(ai)为置换ai的循环节数(i = 1,2,...g)。m种颜色的珠子,每种颜色珠子个数不限,将这些珠子做成长度为n的项链,问能做成多少种不重复的项链。两条项链相同,当且仅当两条项链通过旋转或者翻转后能重合在一起,且对应珠子的颜色相同。(1)旋转:将项链顺时针旋转i格后,其循环节数为gcd(n

2016-08-22 11:35:03 466

原创 3140 Contestants Division

一棵树的节点上均有权值, 将这棵树切成两半, 两个part之间的权值之和差异最小记忆化搜索#include #include #include #include #include #include #include #include #include #include #define LL long longusing namespace std;con

2016-08-22 09:57:30 277

原创 划分树模板

#include #include #include #include using namespace std;const int MAXN = 1e5+10;int a[MAXN],sorted[MAXN];struct Trie{ int num[20][MAXN];//进入左区间的数量 int val[20][MAXN];//记录第i层元素序列 voi

2016-08-20 15:31:42 300

原创 POJ 3693 Maximum repetition substring后缀数组加上RMQ

题意:求重复次数最多的连续重复子串,并且要求字典序最小的.//别人的分析分析:容易想到的就是枚举长度为L,然后看长度为L的字符串最多连续出现几次。长度为L的串重复出现,那么st[0],st[l],st[2*l]……st[k*l]中肯定有两个连续的出现在字符串中。不然肯定长度不超过2*L啊。那么我们就枚举连续的两个,然后从这两个字符前后匹配,看最多能匹配多远。即以st[i*l],

2016-08-20 10:00:07 352

原创 二维树状数组

#include #include #include #include #include #define LL long longusing namespace std;const int MAXN = 1e3+10;int dp[MAXN][MAXN];int lowbit(int k){return k&-k;}void updata(int n,int x,int y,i

2016-08-19 10:56:27 292

原创 RMQ模板

(一)首先是预处理,用动态规划(DP)解决。设A[i]是要求区间最值的数列,F[i, j]表示从第i个数起连续2^j个数中的最大值。(DP的状态)例如:A数列为:3 2 4 5 6 8 1 2 9 7F[1,0]表示第1个数起,长度为2^0=1的最大值,其实就是3这个数。同理 F[1,1] = max(3,2) = 3, F[1,2]=max(3,2,4,5) = 5,F[1,3]

2016-08-19 09:40:19 276

原创 POJ 2774 Long Long Message 后缀数组

2个串的最长公共子串#include #include #include #include #include #include #define INF 0x3f3f3f3fusing namespace std;#define F(x) ((x) / 3 + ((x) % 3 == 1 ? 0 : tb))#define G(x) ((x) < tb ? (x) * 3 +

2016-08-17 14:41:48 380

原创 POJ 2406 Power Strings KMP 或者后缀数组

找最小循环节#include #include #include #include #include #include #define INF 0x3f3f3f3fusing namespace std;char B[1000010];int nex[1100000];int lenB;void getNex(){ lenB = strlen(B);

2016-08-17 11:22:57 294

原创 POJ 3261Milk Patterns可重叠至少出现K次最长子串 二分+height分段

#include #include #include #include #include #include #define INF 0x3f3f3f3fusing namespace std;#define F(x) ((x) / 3 + ((x) % 3 == 1 ? 0 : tb))#define G(x) ((x) < tb ? (x) * 3 + 1 :((x) - tb

2016-08-17 11:19:10 305

原创 后缀数组

#define F(x) ((x) / 3 + ((x) % 3 == 1 ? 0 : tb))#define G(x) ((x) < tb ? (x) * 3 + 1 :((x) - tb) * 3 + 2)const int MAXN = 300010;const int MAXM = 100010;char input[MAXM];int wa[MAXN],wb[MAXN],ws[

2016-08-16 21:50:12 327

原创 poj 1743 Musical Theme 后缀数组

题意:有N(1     1.长度至少为5个音符。    2.在乐曲中重复出现。(可能经过转调,“转调”的意思是主题序列中每个音符都被加上或减去了同一个整数值)    3.重复出现的同一主题不能有公共部分。首先构造差分序列,二分+height分段。至于不能重叠维护每一段最大值最小值。判断是否重叠即可#include #include #include #

2016-08-16 21:45:45 271

原创 POJ 3691 DNA repairAC自动机加DP

题意:给出N个模式串和一个文本串,问最少修改文本串中多少个字母使得文本串中不包含模式串。分析:N个模式串构建AC自动机,然后文本串在AC自动机中走,其中单词结点不可达。用dp[i][j]表示文本串第i个字母转移到AC自动机第j个结点最少修改字母的个数,状态转移方程为dp[i][j]=min(dp[i][j],dp[i-1][last]+add),last表示

2016-08-15 20:37:38 290

转载 矩阵的应用

题意】计算的小数点前三位数,不足三位补0,正整数n的最大值为20亿。【前提】:满足的值在【0,1】范围首先将展开之后可以发现的形式,同样的,有因此,是个整数,其中这正是解题的关键!由于所以的整

2016-08-15 17:17:56 558

原创 PI

提示:如果程序中用到PI的值,可以用acos(-1.0)获得。

2016-08-15 15:57:44 357

原创 向量旋转

在二维坐标系中,一个位置向量的旋转公式可以由三角函数的几何意义推出.比如上图所示是位置向量R逆时针旋转角度B前后的情况.      在左图中,我们有关系:  x0 = |R| * cosA       =>          cosA = x0 / |R|  y0 = |R| * sinA        =>          sinA = y0 / |R|   在右图

2016-08-15 15:55:47 465

原创 POJ 2778 DNA SequenceAC自动机 矩阵快速幂

#include #include #include #include #include #include #define mod 100000#define LL long longusing namespace std;const int M = 4;const int N = 1e6+10;struct Matrix{ int mat[110][110];

2016-08-15 14:47:24 338

转载 AC自动机模板

点击打开链接在一个字符串中出现模板串的个数#include #include #include #include #include #include #define MOD 1000000007using namespace std;const int N = 1e6+10;const int M = 26;struct Trie{ int next[N]

2016-08-15 11:22:46 249

原创 字典树模板

#include #include #include #include #include #include #define MOD 1000000007using namespace std;const int M = 100000;struct node{ int next[26]; int value; bool end;};node tree[

2016-08-15 10:10:53 271

原创 KMP模板

void getNex(){    lenA = strlen(A);    lenB = strlen(B);    nex[0] = -1;    ll i = 0,j = -1;    while(i         if(j == -1 || B[i] == B[j]){            ++j,++i;            if(B[i]!=B[j

2016-08-15 10:03:53 258

原创 左偏树

摘自《ACM/ICPC算法训练教程》键值是用于比较节点的大小距离则是如下定义的:节点i称为外节点,当且仅当节点i的左子树或右子树为空;节点i的距离时节点i到他的后代中,最近的外节点所经过的边数。特别地,如果节点i本身是外节点,则它的距离为0;而空节点的距离规定为-1。左偏树的4条性质:(1)节点的键值小于或等于它的左右子节点的键值(2)节点的左子节点的距离不小于右子节点的距离

2016-08-15 09:40:50 1724

转载 伸展树

伸展树/*维护序列,有6种操作:插入、删除、修改、翻转、求和、求最大子段和。*/#include #include #include using namespace std; int IN[500010];const int INF=1<<28; struct Node{ Node *pre,*ch[2]; bool rev,same;

2016-08-15 08:42:40 268

原创 连通图

求有多少割点?//cnt 为割点的个数//root 为根void tarjan(int u,int pre){ dfn[u] = low[u] = ++tim; int k = 0; for(int i = head[u]; ~i; i = edge[i].next) { const int& v = edge[i].to;

2016-08-13 10:07:23 499

原创 POJ 3592 Instantaneous Transference强连通加缩点后求最长路

n*m的地图,从0,0,开始走,只能向下或向右走,每一个坐标只有0~9、#、*。如果为#代表墙不能通过,如果为*代表是传送门,可以传达其他位置,如果为数字,则代表该点的价值。求最大价值。先输入T,T组数据。输入n、m代表地图的大小。然后输入地图,接下来输入每一个传送门能传送的位置坐标。先用Tarjan把环求出来,然后进行缩点,最后构建一个新图,求最长路。#include #inc

2016-08-12 21:07:23 280

原创 POJ3694

一共有N个点,m条边,无向图,q次询问,每次添加一个边,问添加完边后还剩多少  桥 。用tarjan边连通计算 初始桥的个数。LCA计算添加边之后桥的个数。并查集用来 把每一个边连通分量联系在一起。#include #include #include #include #include #include #include #include #include #defi

2016-08-11 10:56:35 313

原创 点双连通分量

#include #include #include #include #include using namespace std;const int N = 1e6+10;const int NN = 1e3+10;struct node{ int to,next;}edge[N];int head[NN],top;int dfn[NN],low[NN],time,

2016-08-09 10:21:58 356

原创 判断是否为二分图

无向图G为二分图的充分必要条件是,G至少有两个顶点,且其所有回路的长度均为偶数判断一个图是不是二分图,思路当然就是染色法,首先给一个顶点然色,然后与它相邻的顶点全部染相反的颜色,如果过程中发现要染的点已经染色了,而且是和现在点相同的颜色的话,那么就说明不是一个二分图。首先任意取出一个顶点进行染色,和该节点相邻的点有三种情况:1.未染色    那么继续染色此节点(染色为另一种

2016-08-08 10:19:01 713

原创 最小费用最大流poj2516

#include #include #include #include #include #include #include #include #include #define LL long long#define inf 0x3f3f3f3fusing namespace std;const int N = 1e3+10;struct node{ int to

2016-08-08 09:14:20 382

原创 二分图模板

#include #include int g[510][510];int linker[510];int used[510];int n,k,cnt;int DFS( int u ){ int v; for( v = 1; v <= n; v++ ) { if( g[u][v] && !used[v

2016-08-08 09:11:33 244

原创 树状数组初始化

《高级数据结构》 大多数情况下A数组一开始不全是0,如何初始化树状数组呢?一种显而易见的方法就是将A中的元素一个一个地添加进树状数组,不过这样的预处理时间复杂度为O(logn)。下面的算法更加优美,因为我们已经知道树状数组中:sum[index] = a[index-C(index)+1]+...+a[index],所以只需要一开始再维护一个前缀和的数组pre[x] = a[1]+a[2]

2016-08-05 09:58:25 2150

原创 POJ 2983 Is the Information Reliable?

题目来源题意:给N个点,M条信息。1、P A B X, A在B的北面X光年处2、V A B ,A在B的北面,但是不知道确切距离,最少一光年。对于给出的M条信息,看是否有冲突,若有冲突,输出Unreliable;否则,输出Reliable。注意:自身有可能有冲突。另外,需要建立一个超级源点。#include #include #include #include #

2016-08-03 14:57:33 346

原创 POJ 3159 Candies

题目来源题意:给N个人分水果,一共M组数据。每组数据包含A、B、C。B的糖果数-A的糖果数注意:存边一定要用前向星。(1)spfa+优先队列(2)dijkstra优先队列#include #include #include #include #include #include #include #include #include #include #defi

2016-08-03 14:48:29 291

原创 多校 World is Exploding

题目来源题意:有一个A序列,A序列的长度为N。在这个序列中有一些子集(a,b,c,d),满足a!=b!=c!=d,1Ad。最后输出这些序列的个数。思路:容斥原理(1)frontSmall[k]表示在下标k之前比A[k]小的个数(2)frontLarge[k]表示在下标k之前比A[k]大的个数(3)backSmall[k]表示在下标k之后比A[k]小的个数(4)backLar

2016-08-03 11:40:46 260

原创 POJ 1201 Intervals

题目来源题意:一共有N个闭区间,[ai,bi],在闭区间上至少有ci个点,要满足这些要求,集合Z至少有多少的点。(这些点是整点)思路:差分约束系统(1) dis[b]-dis[a-1] >= c(2) 隐藏的含义:1 >= dis[b]-dis[b-1] >= 0dis[b]-dis[b-1] >= 0 && dis[b-1]-dis[b]>=-1(3) 因为 0(4)

2016-08-02 11:08:00 226

原创 POJ 3371 Flesch Reading Ease

题目来源题意:给出一篇规范的文章,求其 句子数、单词数 和 音节数把这3个值代入题目给出的公式,输出其结果,保留2位小数。标记单词分隔符: 逗号(,) 和 空格( )句子分隔符:句号(.) 问号(?) 冒号(:) 分号(;) 感叹号(!)音节处理要求:(1)当单词总长度(2) 当单词总长度 > 3 时,单词中每出现一个元音字母(a、e、i

2016-08-01 21:46:23 310

原创 poj 1472 Instant Complexity

题目来源给出一段程序,计算时间复杂度(能计算的项则计算,不能计算则化到最简的关于n的表达式O(n),并把各项根据n的指数从高到低排列)。一段程序只有唯一一个BEGIN,代表程序的开始。与其对应的为最后的END,代表程序的结束。一段程序最多只有10层循环嵌套,循环的入口为LOOP,一个LOOP对应一个END,代表该层循环的结束。一段程序中OP的个数不限。L

2016-08-01 17:49:29 332

原创 POJ 3393 Lucky and Good Months by Gregorian Calendar

???????Gregorian Calendar????? ???????????????????GCGC???365????366??2??1??GC?12???????????????????GC?1582???????1582????????4???????GC?1582??????1582?????????????????????1? ??4???????10

2016-08-01 16:14:17 459

转载 字符串Hash

字符串hash粘贴的别人的代码:/// @brief BKDR Hash Function /// @detail 本 算法由于在Brian Kernighan与Dennis Ritchie的《The C Programming Language》一书被展示而得 名,是一种简单快捷的hash算法,也是Java目前采用的字符串的Hash算法(累乘因子为31)。 template

2016-08-01 11:29:05 359

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除