05 2014 档案

摘要:题目是求边数最少的最小割集。网上看到了两种方法,粘一下。第一种:建边的时候每条边权 w = w * (E + 1) + 1;这样得到最大流 maxflow / (E + 1),最少割边数 maxflow % (E + 1)道理很简单,如果原先两类割边都是最小割,那么求出的最大流相等但边权变换后只有边... 阅读全文
posted @ 2014-05-19 21:41 贝尔摩德 阅读(1553) 评论(0) 推荐(0)
摘要:首先对于表示这个国家地图的有向边(u,v,cost),直接在图中建一条一样的边(u,v,cost)。对于供你选择的城市i,假设它的价值是value,创建一个汇点T,建一条(i,T,value)的边。然后以1为源点,T为汇点,求最小割即可。有两种边,一种是原地图中的A边,另一种是与汇点相连的B边,若某... 阅读全文
posted @ 2014-05-18 22:16 贝尔摩德 阅读(188) 评论(0) 推荐(0)
摘要:最后的人的位置一定是固定的,所以倒序插入,插入之后这个位置就不参与计数了,所以问题变成,找到第 i 个空位,线段树记录该区间里有几个空位。#include #define maxn 200010int sum[4*maxn];int pos[maxn],val[maxn];int ans[maxn]... 阅读全文
posted @ 2014-05-17 18:49 贝尔摩德 阅读(126) 评论(0) 推荐(0)
摘要:最后的人的位置一定是固定的,所以倒序插入,插入之后这个位置就不参与计数了,所以问题变成,找到第 i 个空位,线段树记录该区间里有几个空位。#include #define maxn 200010int sum[4*maxn];int pos[maxn],val[maxn];int ans[maxn]... 阅读全文
posted @ 2014-05-17 18:49 贝尔摩德 阅读(135) 评论(0) 推荐(0)
摘要:二分最大长度len,再分组判定,代码直接贴的论文里的==#include "stdio.h"#define maxn 20000int wa[maxn],wb[maxn],wv[maxn],ws[maxn];int cmp(int *r,int a,int b,int l){return r[a]=... 阅读全文
posted @ 2014-05-16 19:58 贝尔摩德 阅读(131) 评论(0) 推荐(0)
摘要:二分最大长度len,再分组判定,代码直接贴的论文里的==#include "stdio.h"#define maxn 20000int wa[maxn],wb[maxn],wv[maxn],ws[maxn];int cmp(int *r,int a,int b,int l){return r[a]=... 阅读全文
posted @ 2014-05-16 19:58 贝尔摩德 阅读(107) 评论(0) 推荐(0)
摘要:题目给出一个字符串,合法的子串是该字符串的前缀,且存在一个后缀与他匹配。求一共有几个合法的子串,并求出每个合法的子串在字符串中出现的次数。第一问可以直接用kmp的p数组解决,除了原字符串本身外最长的合法子串是1----p[ len ],第二长的是1----p[p[ len ] ],直到为0,累加就好... 阅读全文
posted @ 2014-05-16 19:46 贝尔摩德 阅读(157) 评论(0) 推荐(0)
摘要:题目给出一个字符串,合法的子串是该字符串的前缀,且存在一个后缀与他匹配。求一共有几个合法的子串,并求出每个合法的子串在字符串中出现的次数。第一问可以直接用kmp的p数组解决,除了原字符串本身外最长的合法子串是1----p[ len ],第二长的是1----p[p[ len ] ],直到为0,累加就好... 阅读全文
posted @ 2014-05-16 19:46 贝尔摩德 阅读(136) 评论(0) 推荐(0)
摘要:线段树维护该区间有多少个数就好,计算名次时二分一下。#include #define maxn 362144 int tree[4*maxn];void pushup(int o){ tree[o]=tree[o*2]+tree[o*2+1];}void build(int l,int r,i... 阅读全文
posted @ 2014-05-15 16:47 贝尔摩德 阅读(103) 评论(0) 推荐(0)
摘要:线段树维护该区间有多少个数就好,计算名次时二分一下。#include #define maxn 362144 int tree[4*maxn];void pushup(int o){ tree[o]=tree[o*2]+tree[o*2+1];}void build(int l,int r,i... 阅读全文
posted @ 2014-05-15 16:47 贝尔摩德 阅读(118) 评论(0) 推荐(0)
摘要:将两个字符串连接起来,中间加一个没出现过的字符,getfail一下,就是公共部分。#include #include char c[200100];char a[100100];char b[100100];int p[200100];int solve(int len1,char *a,int l... 阅读全文
posted @ 2014-05-15 16:44 贝尔摩德 阅读(127) 评论(0) 推荐(0)
摘要:将两个字符串连接起来,中间加一个没出现过的字符,getfail一下,就是公共部分。#include #include char c[200100];char a[100100];char b[100100];int p[200100];int solve(int len1,char *a,int l... 阅读全文
posted @ 2014-05-15 16:44 贝尔摩德 阅读(135) 评论(0) 推荐(0)
摘要:先dp预处理往四个方向走的最大值,在枚举每个点作为碰面点的情况,取最大值#include #include int sc[1010][1010];int dp1[1010][1010];int dp2[1010][1010];int dp3[1010][1010];int dp4[1010][101... 阅读全文
posted @ 2014-05-12 23:26 贝尔摩德 阅读(171) 评论(0) 推荐(0)
摘要:先dp预处理往四个方向走的最大值,在枚举每个点作为碰面点的情况,取最大值#include #include int sc[1010][1010];int dp1[1010][1010];int dp2[1010][1010];int dp3[1010][1010];int dp4[1010][101... 阅读全文
posted @ 2014-05-12 23:26 贝尔摩德 阅读(135) 评论(0) 推荐(0)
摘要:#include #define maxn 100010int p[maxn],rank[maxn];int find(int x){ if(x==p[x]) return x; else { int tmp=p[x]; p[x]=find(p[x]);... 阅读全文
posted @ 2014-05-07 22:01 贝尔摩德 阅读(139) 评论(0) 推荐(0)
摘要:#include #define maxn 100010int p[maxn],rank[maxn];int find(int x){ if(x==p[x]) return x; else { int tmp=p[x]; p[x]=find(p[x]);... 阅读全文
posted @ 2014-05-07 22:01 贝尔摩德 阅读(135) 评论(0) 推荐(0)
摘要:转载==题意:每个' . '有一个姑娘, E是出口,'.'是空地 , 'X‘ 是墙。 每秒钟每个姑娘可以走一步(上下左右) 每秒钟每个出口只能出去一个人 给定n*m的地图, 时限T 问所有姑娘能否在T秒内逃生,若能输出最小值,不能输出"impossible" 思路: 显然是二分答案+网络流判可行。 ... 阅读全文
posted @ 2014-05-06 17:41 贝尔摩德 阅读(194) 评论(0) 推荐(0)
摘要:将两个字符串连接,中间加一个没出现的字符,最后添加0。然后从小到大枚举长度ans,对于每个ans,对height数组分组,答案只可能出现在某组内,对每组进行检查,如果只存在两个字符串一个在前一个在后则return true,贴的代码是别人的。#include #include #include us... 阅读全文
posted @ 2014-05-05 15:30 贝尔摩德 阅读(204) 评论(0) 推荐(0)
摘要:#include#include#include#include#includeusing namespace std;#define maxn 100000 + 10#define modu 1000000007#define INF 2000000000vector G[maxn], G2[ma... 阅读全文
posted @ 2014-05-04 20:33 贝尔摩德 阅读(169) 评论(0) 推荐(0)