摘要: 后缀数组 DA(倍增)算法求 SA[N] 与 Rank[N] (时间O(NlogN),空间O(N))sa[i] : 表示 排在第i位的后缀 起始下标rank[i] : 表示后缀 suffix(i)排在第几height[i] : 表示 sa[i-1] 与 sa[i] 的LCP 值h[i]: 表示 suffix(i)与其排名前一位的 LCP值const int N = int(2e5)+10;int cmp(int *r,int a,int b,int l){ return (r[a]==r[b]) && (r[a+l]==r[b+l]);}// 用于比较第一关键字与第二关键字,/阅读全文
posted @ 2013-08-02 21:51 yefeng1627 阅读(3910) 评论(1) 编辑
摘要: #include#include#include#include#includeusing namespace std;const int N = 2010;const int M = 10010;typedef long long LL;const int SIZE = 100003;const int SEED = 13333;struct Node{ LL key; int type; Node *next; Node *set(LL _key,Node *_next ){ key = _key; next = _next; type = -1; ...阅读全文
posted @ 2013-07-31 17:51 yefeng1627 阅读(116) 评论(0) 编辑
摘要: 图的连通性dfn[u]: 表示节点u的搜索优先级low[u]: 表示节点u,通过其本身或其子节点能到达的最小有搜索优先级low[u] = Min{ 1. dfn[u] 其本身搜索优先级 2. Min{ low[v] } 其子节点v能到达的最小优先级 3. Min( dfn[v] ) 其通过回边(u,v),其中v为u的祖先节点,的优先级}一无向图1. 割点又名关键点,若删除该点与其发出的边.则整个图不连通.当前顶点u是一个关键点的充要条件是:1. 若顶点U是根,则其必定包含两个以上的子节点. (因为若只有一个.删除了U之后,图仍然连通)2. 若顶点U不是根,...阅读全文
posted @ 2013-07-26 13:49 yefeng1627 阅读(769) 评论(0) 编辑
摘要: #include#include#include#include#includeusing namespace std;const double esp = 1e-8;#define Fact(x) ((x)*(x))//一般图匹配带花树const int MaxN = 111;int N;bool Graph[MaxN][MaxN];int Match[MaxN];bool InQueue[MaxN], InPath[MaxN], InBlossom[MaxN];int Head, Tail;int Queue[MaxN];int Start, Finish;int NewBase;int 阅读全文
posted @ 2013-07-24 17:27 yefeng1627 阅读(662) 评论(0) 编辑
摘要: SGU 7/15 & 7/17http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26430#overviewCF 7/16http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26433#overview阅读全文
posted @ 2013-07-17 18:46 yefeng1627 阅读(90) 评论(0) 编辑
摘要: 题目详解出自 论文 Amber-最小割模型在信息学竞赛中的应用题目大意: 给出一个带权无向图 G = (V,E), 每条边 e属于E都有一个权值We,求一个割边集C,使得该割边集的平均边权最小,即最小化:1. 将等式转换,引入x向量,Xi取值为(0,1),得到0-1分数规划常规式:2. 将其转换得到一个关于的一个函数:3. 其中为单调递减函数, 当且仅当= 0 , 为最优值.然后我们可以二分枚举最优值, 然后判定当前最优值是否符合要求.判定思路: 对于每一条边权Wi 变换成了新的边权, 而向量X(x1,x2,..,xm)表示对应边取或者不取,所以根据其取与不取划分成一个ST集。令取为...阅读全文
posted @ 2013-07-07 17:30 yefeng1627 阅读(477) 评论(0) 编辑
摘要: 构图思路:1. 源点S与顶点v连边,容量为A2. 顶点v与汇点T连边,容量为B3. 边(a,b,c),则顶点a与顶点b连双向边,容量为c则最小花费为该图最小割即最大流。若两个作业分别在不同机器运行,则之间若有边,则必定是满流,否则必定还有增广路。#include#include#include#includeusing namespace std;const int inf = 0x3f3f3f3f;const int MAXN = (int)2e5+10;int n, m;int S, T, N;int head[MAXN], idx;struct Edge{ int v, f, nx...阅读全文
posted @ 2013-07-07 13:06 yefeng1627 阅读(90) 评论(0) 编辑
摘要: 构图思路:1.将所有顶点v拆成两个点, v1,v22.源点S与v1连边,容量为 W-3.v2与汇点连边,容量为 W+4.对图中原边( a, b ), 连边 (a1,b2),容量为正无穷大则该图的最小割(最大流)即为最小花费。简单证明: 根据ST割集的定义,将顶点分成两个点集。所以对于原图中的边(a,b),转换成 S->a1->b2->T. 则此时路径必定存在一条割边,因为a1->b2为无穷大,所以割边必定是 S->a1 or b2->T, 若为前者则意味着删除a顶点的W-,后者则是b顶点的W+.所以该图最小割即为最小花费。计算方案: 对于构图后跑一次最大流,阅读全文
posted @ 2013-07-07 12:22 yefeng1627 阅读(333) 评论(0) 编辑
摘要: 二分枚举租用飞机的最大花费,然后用小于等于最大花费的边构建层次图(依据时间)构图思路: 利用二元组(x,y)表示 x天y城市 1. e天有飞机从a城市飞到b城市,能够承载x人,则添加单向边 ( e, a ) -> ( e+1, b ) 容量为x 2. 每一天的a城市到第二天的a城市连边,容量为正无穷大 3. 每一天的N城市到汇点T连边,容量为正无穷大 4. 源点V与第0天的所有顶点连边,容量为当前城市0天初始人数#include#include#include#include#include#include#includeusing namespace std;const int M..阅读全文
posted @ 2013-07-06 21:04 yefeng1627 阅读(150) 评论(0) 编辑
摘要: 水平太渣. 唯有看完解题报告+标程 AK这套题.A CircleGame. 需要取上整,核心点加上了一个小于1的小数.当n = 2时,有 , 然后可以验证下当n取其他值时也满足。所以就有又 , 则其特征方程的两个解为:当 n = 2. 时, 其特征方程为:化简得到:因为所以有:S_2 - 2*a*S_1 + (a^2+b) = 0得到线性递推关系, 然后矩阵快速幂随便搞搞就好了。// Sn = ceil( [a + sqrt(b)]^n ) % m;#include<cstdio>#include<cstdlib>#include<cstring>#incl阅读全文
posted @ 2013-06-05 22:52 yefeng1627 阅读(220) 评论(0) 编辑