自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Wo xi Meiz

This is the survival of the fittest This is do or die This is the winner can take it all

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

原创 几道黑书上的简单DP题

这几道经典的题本不应再由本菜啰嗦,无奈手痒总想贴点代码~POJ1141 括号的匹配dp[i][j]表示从i到j使括号匹配完整的最少需要添加的括号,有dp[i][i]=1;dp[i][j]=min(dp[i][k],[k+1][j]);当s[i]=='(',s[j]==')'或者s[i]=='[',s[j]==']'时,dp[i][j]=min(dp[i][j],dp[i+1][

2012-08-30 22:06:00 1084

原创 POJ2763-LCA在线算法+树状数组

#include #include #include #include #include using namespace std;const int NN=210000;int n,en,c[NN],head[NN];struct Edge{ int v,w,next; Edge() {} Edge(int _v,int _w,int _next): v

2012-08-28 11:25:26 1336

原创 POJ3728-LCA及诸多优化

这题是一个在一开始就能吓住人,然后分析分析,再分析分析,再分析分析,发现能做的好题。题意:给出一个结点带权price的树状图(结点数首先最朴素的想法是,找出u到v的路径(用到LCA),完整地访问一遍得结果。朴素的想法是出发点,虽不可行,觉得有可行的优化空间。优化线索:询问之间有路径的重复,重复的部分可通过一些记录来除掉重复访问和计算;对于这条线索,我的想法是可以先处理路径较短的

2012-08-26 20:40:38 1748

原创 HDOJ3594-仙人掌图的判断

/*题意:给出一个有向图,判断该图是否为仙人掌图.这里有一个不错的关于仙人掌图性质分析文章: pdf:http://files.cnblogs.com/ambition/cactus_solution.pdf代码也是按照文章中的仙人掌图的3个性质来做的.*/#include #include #include using namespace std;const int

2012-08-24 15:51:16 3424

原创 POJ2175-最小费用流消圈算法

#include #include #include #include #include using namespace std;const int NN=210;const int MM=100000;const int INF=0x3fffffff;inline int Abs(int x){ if (x>=0) return x; else

2012-08-23 19:44:44 2807 1

原创 HDOJ3472-混合图欧拉路的求解

我的访问量绝大部分来自于几篇关于欧拉(回)路的博客,唉~欧拉路又来了!//将字母看成结点,单词如victoria看成边,倒过来有意义的单词为无向边,否则为有向边,不难想串接单词就是求是否有欧拉路。//求欧拉路可以通过加一条边来转化为求欧拉回路(同HDOJ1637),建好网络用最大流来解即可//要注意的是,这题在求解之前应该判断一下图是否连通,这里用的是并查集来判断的。#include

2012-08-22 19:46:10 4544

原创 HDOJ2433-最短路径树

//1406ms险过。#include #include #include #include #include using namespace std;const int NN=110;const int MM=3100;struct node{ int v,e; node() {} node(int _v,int _e): v(_v),e(_e) {}

2012-08-21 17:35:21 728

原创 HDOJ3035平面图最小割转最短路

百万数量级的点呀好吓人~此题两种解法:(1)最大流,但明显点太多,肯定超时,不过明知道超时我也写了一遍~然后坐等TLE~(2)最短路,刚开始不知道还可以这么转化,搜了一下平面图最小割,看到下图后顿悟(虽然不知道原图干嘛的~),立马写最短路了,我个傻B一最短路就写spfa,一最短路就写spfa,也不分析分析~又TLE之后就又写了dijkstra了,2秒多过的。还有这题建图有点

2012-08-21 17:24:26 1858 3

原创 POJ1084-重复覆盖,DLX

这题可理解为用最少用多少火柴棒覆盖全部的正方形,以正方形为列,火柴棒为行,重复覆盖模型明显。建图的时候要找出所有正方形所包含的火柴棒,我是这样找的:先确定最左上边的正方形(边长为1~n)所包含的边,因为对于等大的两个正方形,其相同位置的火柴棒边的标号的差是一定的,所以算出一个正方形的边根据差就能得出其他的等大的正方形的边了。/*第一道像样一点的DLX重复覆盖,这题数据弱~*/

2012-08-20 12:45:35 1988

原创 HDOJ2448-最短路,KM匹配

#include #include #include #include using namespace std;const int NN=120;const int INF=0x3fffffff;struct node{ int v,w; node() {} node(int _v,int _w): v(_v),w(_w) {}};int n,m,l

2012-08-19 20:01:26 605

原创 HDOJ2828-DLX, 重复覆盖小变形

代码是昨天写的,今天又试着做重复覆盖的DLX,发现根本写不下,出现了重重错误,我还以为我昨天误打误撞的代码很优咧,太自以为是了!这道HDOJ2828也是好题,它比我今天试写的HDOJ3957简单得多,最大的不同不是一个只是求一个YES/NO,另一个求的是最小dfs深度,而是3957的链表数据中的关系比2828复杂,所以dance实现部分的思想都是不一样的~**尚未成功,菜鸟仍需努力~不想说re

2012-08-19 11:30:03 988

原创 POJ3740-精确覆盖,Dancing_links

位运算裸搜版(500ms):#include #include #include #define LL long longusing namespace std;const int N=32;const int L=10;LL w[L],goal[L],x[20][L];int m,n,a[20][320];inline bool cont(LL *x,LL *y

2012-08-18 12:30:15 1679 3

原创 POJ2230-还是简单的欧拉回路求解

#include #include #include #include using namespace std;const int NN=10002;vector ans;vector adj[NN];int n,m,cur[NN];void dfs(int u){ for (int &i=++cur[u]; i<adj[u].size(); i++) {

2012-08-17 16:52:02 4916

原创 Topcoder SRM552 Div1 500

int FoxAndFlowerShopDivOne::theMaxFlowers(vector flowers, int maxDiff){ const int NN=1000; int n=flowers.size(); int m=flowers[0].size(); int l[32][32],p[32][32]; int dpi[32][2000],dpj[32][2

2012-08-17 15:00:49 801

原创 HDOJ2419-逆向处理操作,并查集,set

/*好题!本题的靓处:1.逆向处理所给操作,将集合的拆分化为整合2.STL set的lower_bound()函数想法非原创,来自:http://blog.csdn.net/woshi250hua/article/details/7782875*/#include #include #include #include #include using namespace std;

2012-08-16 22:38:13 795

原创 HDOJ4362-决策单调的DP

易得此题DP方程: dp[i][j]=min{dp[i-1][k]+abs(x[i-1][k]-x[i][j])}+cost[i][j]; //1当x[i-1][k]当x[i-1][k]>x[i][j]时,dp[i][j]=min{dp[i-1][k]+x[i-1][k]}-x[i][j]+cost[i][j];  (2)(1)和(2)式中的min{}部分均与j无关,单调性明显。故

2012-08-16 12:23:14 642

原创 POJ2912-并查集

这题是POJ1182食物链的升级版,先做那题,这题应该也没问题了。#include #include #include using namespace std;const int NN=550;const int MM=2100;int n,m;struct Rec{ int a,b,c; Rec() {} Rec(int _a,int _b,int

2012-08-15 20:35:45 1091

原创 POJ1182-并查集

这题有一个关键点: x的食物的食物以x为食,即生物间的关系是以3为循环的,就像运算 (0+1)%3=1,(1+1)%3=2,(2+1)%3=0,(0+1)%3=1... ...不管d=1还是d=2,都表示x与y有关系,因此可以并到一个并查集里去,然而具体的同类与捕食关系可用0,1,2来代表;这里以r[i]表示i与其并查集中父节点p[i]的关系: 0表示同类,1表示i吃p[i],2表是i被p

2012-08-14 17:39:12 840

原创 HDOJ2888-裸二维RMQ

#include #include #include #include using namespace std;const int NN=301;int n,m,a[NN][NN],dp[NN][NN][9][9]; //内存卡得紧inline void get(int &x){ char c=getchar(); while (c'9') c=getchar

2012-08-14 14:22:07 961

原创 ZOJ3332-竞赛图中的哈密顿路

竞赛图:图中的任意两点间有且仅有一条有向弧连接求竞赛图中的哈密顿路的算法:首先,由数学归纳法可证竞赛图在n>=2时必存在哈密顿路;(1)n=2时显然;(2)假设n=k时,结论成立,哈密顿路为V1,V2,...,Vi,...,Vk;     现添加第k+1个结点,若存在弧和弧,则可得哈密顿回路V1,V2,...,Vi,Vk+1,Vi+1,...,Vk;     若不存在上述的

2012-08-13 11:44:39 6418

原创 POJ2396-带上下限制的最大流

#include #include #include using namespace std;const int NN=1000;const int MM=5000000;const int INF=0x3fffffff;bool blank=false;int n,m,S,T,NV,en,head[NN];struct Edge{ int u,v,flow,next

2012-08-12 23:03:28 1261

原创 SGU194-带上下限的最大流基础

/*对于有流量上下限的无源的网络流的可行流转化为一般的有源汇点的最大流来做(1)添加超级源点S和超级汇点T(2)对于原有的边(u,v,l(u,v),c(u,v))(l为流量下限,c为流量上限),添加边(u,v,0,c-l);(3)对于每个结点i,记w[i]=sum(l(u,i))-sun(l(i,v)); 若w[i]>0,添加边(S,i,w[i]),若w[i]<0,添加边(i,T,-

2012-08-11 17:30:17 1754

原创 POJ3686-KM匹配模板题

#include #include #include using namespace std;const int NN=2550;const int INF=0x3fffffff;int n,m,lx[NN],ly[NN],w[NN][NN],a[NN][NN],match[NN],slack[NN];bool vx[NN],vy[NN];void init(){

2012-08-09 14:58:11 887

原创 POJ3155-最大密度子图

/*主算法:零一规划,用二分来猜测最大密度为g。。。构造函数h(g)=(|E'|-g*|V'|)设D为最优解,当h(g)D;当h(g)=0,g=D;当h(g)>0,g<D;网络流建图部分:在原图点集V 的基础上增加源S和汇T;将每条原无向边(u,v)替换为两条容量为1 的有向边(u,v)和(v,u);增加连接源S到原图每个点v的有向边(s,v) , 容量为U ;增加连接原图每个

2012-08-08 18:57:16 2143

原创 POJ3164-最小树形图

//A是A了,有蛋也疼的代码#include #include #include #include #include using namespace std;const int NN=110;const double INF=1e20;int n,m;int pre[NN];double x[NN],y[NN],d[NN][NN];bool vis[NN],circle

2012-08-07 11:46:09 818 2

原创 HDOJ2853-KM匹配,放大技巧

/*几天我想通了。想不到好的办法总在google算法,自己都觉得自己很猥琐了~其实没什么的。我很菜,菜得绿油油的,如果总是死脑筋想自创,那效率会有多低?不过自我思考的独立阶段还是要保持好的。这题让我自己想恐怕想不到加大权值来保持原匹配优势的办法:统一扩大一定倍数,再在原匹配权值上加个小量,再去匹配这样做的条件是小量不会影响最后的答案,也就是倍数够大,对于这题这个倍数大过n(<=

2012-08-06 19:30:05 633

原创 POJ3680-费用流

/*都说这题是构图很巧的好题~我也赞一个吧,虽然我没有想到。说说我的思考过程吧。做这题是因为这题在网络流的分类里面,自然一开始就想构图了~(1)能作为结点的东西的只有两个,区间和端点,区间没什么道理,以端点做结点的话,离散化是要的;(2)k限制流量用,段的权值与流量没什么关系,是一种费用性的东西,所以是费用流;(3)考虑到区间包含连续的点,我画了一个S->1->2->...->T的线图

2012-08-05 23:52:47 1571

原创 POJ2438-求解哈密顿回路

/*学习参考:http://imlazy.ycool.com/post.2072698.html http://blog.csdn.net/weiguang_123/article/details/7830047*/#include #include #include using namespace std;const int NN=420;int n,m;b

2012-08-05 15:24:56 1780

原创 ZOJ2532-网络流求关键边

#include #include #include using namespace std;const int NN=110;const int MM=3000;const int INF=0x3fffffff;int n,m,S,T,NV;struct Edge{ int u,v,flow,next; Edge() {} Edge(int _u,i

2012-08-04 10:33:46 1498

原创 HDOJ4331-枚举技巧,树状数组统计优化

/*HDOJ官方题解:本题题目大意在一个01方阵中找出四条边全都是1的正方形的个数,对于正方形内部则没有要求。 一个直观的想法是首先用N^2的时间预处理出每一个是1的点向上下左右四个方向能够延伸的1的最大长度,记为四个数组l, r, u, d。然后我们观察到正方形有一个特征是同一对角线上的两个顶点在原方阵的同一条对角线上。于是我们可以想到枚举原来方阵的每条对角线,然后我们对于

2012-08-03 19:33:20 725

原创 POJ1419-最大团

#include #include #include using namespace std;const int NN=102;int n,ans,cnt,x[NN],opt[NN];bool map[NN][NN];void dfs(int i){ if (i>n) { ans=cnt; for (int i=1; i<=n;

2012-08-02 17:50:51 1384

原创 HDOJ4322-费用流

/*好题~网络流不熟啊,刚开始枚举会被当成喜欢的糖的糖的组合来最大流,确实没有考虑清楚当bi%k的一些不同的情况~看了一篇比较有启发的博客后,才写的费用流:以糖果数量限制流量,在喜欢的糖果与人之间连边 在人与汇点间建费用为k,流量为b[i]/k的边,那么cost*flow就成了glad value了!(这是我茅塞顿开的地方) 那么我在之前用最大流做时不能处理的b[i]%k的问题也好

2012-08-02 11:52:34 596

原创 HDOJ4328-最大子矩阵,悬线法

/*在我眼里,有好的算法模板代码来看学才是王道~此题没用单调队列(不熟,不知如何用是好),用的是悬线法求最大子矩阵学习此法大牛们都推荐王知昆的论文,小cai我也推荐下,另外也推荐多搜几个代码,找个好看的模仿模仿~*/#include #include #include using namespace std;const int NN=1002;int n,m,ans;

2012-08-01 20:19:01 2494

原创 POJ2749-二分,2SAT

#include #include #include using namespace std;const int NN=1100;const int MM=4000000;const int INF=100000000;int n,a,b,diss;int d[NN],hate[NN][2],love[NN][2];struct Edge{ int v,next;

2012-08-01 10:10:24 709

2012ACM Final华沙现场真题

2012年ACM华沙现场真题 pdf格式 for acmer。

2012-05-17

空空如也

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

TA关注的人

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