自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

1292765944的专栏

记录我的acm之路

  • 博客(30)
  • 资源 (1)
  • 收藏
  • 关注

原创 POJ 3469

用了一年的SAP模板T了,学习了一下非递归的写法SAP算法的核心:维护距离标号的方法是这样的:当找增广路过程中发现某点出发没有允许弧时,将这个点的距离标号设为由它出发的所有弧的终点的距离标号的最小值加一。这种维护距离标号的方法的正确性我就不证了。由于距离标号的存在,由于“怎么走都是最短路”,所以就可以采用DFS找增广路,用一个栈保存当前路径的弧即可。当某个点的距离标号被改变时,栈中指向

2012-09-29 20:52:06 914

原创 HDU 4328

单调栈和简单DP#include#include#includeusing namespace std;struct point{ int h; int w;}stack[1005];int n,m;char in[1010];int map[1010][1010];int dp[1010][1010];int sum[1010][1010];int DP

2012-09-28 15:44:51 751

原创 Codeforces 124 E

最小生成树的好题!需要构造只包含k个点的图,但是如果暴力去搞必然超时,所以只加入有可能成为MST中的边的边,最后求一遍最小生成树First of all, we can note that if each graph vertex is portal, the answer will be a sum of all edges' weights in MST (minimal span

2012-09-28 11:54:01 3330

原创 ZOJ 3613

斯坦纳树#include#include#include#define N 210#define M 5100using namespace std;int a[N],b[N];int a1[N],b1[N];int st[N],dp[N][1000],ans[1000];bool vis[N][1000];struct Edge{ int v,w,next;}e

2012-09-27 21:29:57 806

原创 WC2008 浏览计划

斯坦纳树#include#include#include#define N 11#define M 1100#define INF 100000000using namespace std;int n,m,k,K;int st[N][N];int dp[N][N][M];int pre[N][N][M];bool vis[N][N][M],ok[N][N];int ma

2012-09-27 16:03:20 806

原创 HDU 4085

斯坦纳树具体参见国家队论文#include#include#include#define M 1100#define N 55#define INF 100000000using namespace std;struct Edge{ int v,w,next;}edge[M*2];int head[N],cnt;int n,m,k,K;int st[N];i

2012-09-27 12:16:45 1255

原创 CF 126B

简单KMP#include#include#include#includeusing namespace std;char s[1000005];int next[1000005],flag,len;bool hash[1000005];void getnext(){ int k=1,j=0; next[k]=0; while(k<=len+1){

2012-09-22 20:52:52 988

原创 最短路--差分约束系统

看了一晚上头都大了。。。以前学的时候不是太懂加上好久没做就更不懂了http://imlazy.ycool.com/post.1702305.htmlhttp://hi.baidu.com/accplaystation/item/72c9e50dd1eb63e3f45ba6ff看了这两篇篇文章后有些微懂总结下来就是这么个结论:如果做后是取最值求最大值,把不

2012-09-21 21:26:00 731

原创 HDU 4288

线段树每个区间记录该区间内sum[0...4],在区间合并用时注意右区间需要用上左区间的所含元素个数。#include#include#include#define N 100100typedef long long ll;using namespace std;struct Point{ int l,r; int num;//number in the

2012-09-16 20:05:27 1262

原创 HDU 4339

常规做法大家应该都会了,这里说一下hash的做法(摘自官方解题报告)    We can compare two substrings using hash (s[0]*(p^0)+s[1]*(p^1)+...+s[i]*(p^i), where ^ means power).Let's n be 1+max(l1, l2). For i (l1<=i and i<n) put s

2012-09-15 22:21:28 849

原创 HDU 4262

线段树记录区间中已取走的个数#include#include#include#define N 100100using namespace std;int n;int now;long long ans;int a[N],pos[N];struct Tree{ int l,r,num;}tree[N*3];void build(int s,int t,int id

2012-09-15 19:52:43 724

原创 HDU 4263

并查集的应用先算出用红边去构成生成树最多用x1条,那么蓝边最少就用n-1-x1;再算出用蓝边去构成生成树最多用x2条,那么蓝边最多就用x2;然后判断k是否介于之间即可#include#include#define N 1010using namespace std;int c1,c2;int f1[N],f2[N];int n,m,k;void init(){

2012-09-15 16:53:26 832

原创 HDU 4260

简单递归#include#include#includeusing namespace std;char s[100];int len;long long dfs(int pos,char to){ if(pos==-1) return 0; if(to=='A'){ if(s[pos]==to) return

2012-09-15 15:54:59 815

原创 HDU 4271

字符串的编辑距离的扩展//f[i,j]表示s[0...i]与t[0...j]的最小编辑距离。    f[i,j] = min { f[i-1,j]+1,  f[i,j-1]+1,  f[i-1,j-1]+(s[i]==t[j]?0:1) }    f[i-1,j]表示将s[i]删去,剩下是s[0...i-1]与t[0...j]的最小编辑距离;f[i][j-1]表示在s[i]后面

2012-09-15 14:49:58 992

原创 HDU 4323

字符串的编辑距离#include#include#include#define inf 100000000using namespace std;int num[110],sum[110],dp[110][110];#include#include#include#include#includeusing namespace std;string str1[1510]

2012-09-14 21:09:09 746

原创 HDU 4383

区间DP好题#include#include#include#define inf 100000000using namespace std;int num[110],sum[110],dp[110][110];int main(){ int t,T,n; int l,i,j,k; scanf("%d",&T); for(t=1;t<=T;t++){

2012-09-14 20:19:22 787

原创 HDU 4267

简单树形DP#include#include#include#define N 102using namespace std;struct Edge{ int v,w,next;}edge[N*2];int n,t;int head[N],cnt;int pre[N],cost[N],num[N];bool mark[N];int dp[N][502],yes[N

2012-09-14 14:52:05 928

原创 HDU 4272

正解是状态压缩的搜索dfs求是否有可行解,bfs求最优解#include#include#include#includeusing namespace std;int n;int num[2000],num1[2000];int dp[1100][1100];int dfs(int pos,int sta){ int npos,nsta,i,j,cou;

2012-09-13 16:35:31 1089

原创 HDU 4267

这棵线段树又写跪了!需要明白(i - a) % k == 0等价与i%k=a%k单点查询#include#include#include#include#include#include#include#include#include#define eps 1e-7#define LL long long#define N 5

2012-09-12 20:12:24 739

原创 HDU 4277

这个乱搞题用hash+set搞或着DFS即可#include#include#include#include#include#define N 32768using namespace std;int a[20];int num[N+100];struct Point{ int sum,id;}p[N+100];sets;bool cmp(struc

2012-09-11 18:08:32 929

原创 hdu 3655

SPFA求1,2,3,这三个点的单源最短路然后枚举每个点做meeting point ,遍历这个点的临接边,然后判断这个边是否是(1,2,3)中的至少2个点的最短路上的边即可。#include#include#include#include#define N 3010#define M 200010#define inf 200000000typedef long long

2012-09-06 18:01:55 906

原创 2011年北京区域赛A题

次小生成树的简单应用#include#include#include#include#include#define N 1010using namespace std;int x[N],y[N],p[N],vis[N];double dis[N][N],d[N],mx[N][N];int main(){ int t,T,i,j,n; double A,B,

2012-09-05 20:08:21 2087

原创 FZU 1901

简单KMP#include#include#include#includeusing namespace std;char s[1000005];int next[1000005],flag,len;void getnext(){ int k=1,j=0; next[k]=0; while(k<=len+1){ if(j==0||s[k]=

2012-09-05 16:27:39 900

原创 Codeforces Beta Round #7, problem: (D) Palindrome Degree

#include#include#include#include__int64 dp[5000000+5];char s[5000000+5];using namespace std;int main(void){ __int64 ans=0,l=0,r=0,k=1; scanf("%s",s); for(int i=0;s[i];i++) {

2012-09-05 15:21:25 1566

原创 HDU 3973 AC's String

<!--@page {margin:0.79in}p {margin-bottom:0.08in; direction:ltr; color:#000000; text-align:justify; widows:0; orphans:0}p.western {font-family:"Calibri",sans-serif; font-size:1

2012-09-05 15:02:38 2280 3

原创 CF 113B || CF196D

watashi大神的代码#include #include #include #include using namespace std;vector pos(const string& s, const string& p) { vector ret; for (string::size_type i = s.find(p); i != string::npos; i =

2012-09-05 13:42:26 1237

原创 SPOJ HACKING

题意:给出一个长为 n 的,由字母表中前 k 个小写字母组成的字符串 s.求一个长度为m的字符串,要求该串也只能由字母表前 k 个小写字母组成,且其不能是 s 的子串.(题目指出一定有解)方法一:在判重时采用这样的方法,想把原串中长度为m1的字串都求出hash值存入set中,然后从0开始寻找第一个未出现在set中的数,将其翻译成相应的字符串.#include#include

2012-09-05 13:38:42 741

原创 BOJ 204

询问区间的最长回文#include#include#include#include#includeusing namespace std;const int maxn=200100;int rad[maxn*2];char str[maxn],s[maxn*2];int q;int odd[maxn],even[maxn];int mm[maxn],mo[maxn]

2012-09-03 16:22:45 670

原创 Codeforces 136 divIID && zoj 3633 && HDU 4358

三道类似的线段树可参见这里的代码http://blog.csdn.net/struggle_mind/article/details/7931956今天下午把HDU 4358重敲了一遍#include#include#include#include#define N 100100using namespace std;int val[N],a[N],nu

2012-09-02 21:57:28 1008

原创 HDU 3948

UESTC的神题啊!主要是去重比较难想主要思想就是:按sa数组i从2开始枚举到n,pre1记录的是上一次计算过的回文串,所以先与height[i]取小值,代表这次计算重复的回文串,然后与实际的回文串相比较计入总和。然后更新pre1,继续向下迭代。这里回文的两个后缀是不会重复计算的,因为在SA数组中如果有夹在之间的后缀,那么pre1的大小是不会变小的,所以不会被重复计算pre2同理更

2012-09-01 17:48:44 1803

AC自动机通配符匹配

详细介绍AC自动机原理和通配符匹配原理,值得一看

2014-01-20

空空如也

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

TA关注的人

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