- 博客(38)
- 资源 (34)
- 收藏
- 关注
原创 高斯消元
占坑: http://zh.wikipedia.org/wiki/%E9%AB%98%E6%96%AF%E6%B6%88%E5%8E%BB%E6%B3%95 http://files.cnblogs.com/files/proverbs/%E9%AB%98%E6%96%AF%E6%B6%88%E5%85%83%E6%80%BB%E7%BB%93.pdf
2015-06-07 16:20:26 425
原创 I am coming back
在继noi失利后,高考也出乎意料地挂掉了(当然,我承认这些都是我自己的原因,不管是noi还是高考,都没有足够的努力的结果),因此来到了这所差强人意的大学。在经历了一学年的调整(其实就是无所事事),终于意识到不能再这样继续下去了。虽然剩下的时间不多了,但现在开始总比一直用时间不多作为借口而逃避要好多了。在短时间内,我还是会以这个博客为主,暂时没有自己开博客的计划和安排(主要是没钱也没精力)。
2015-05-14 20:09:20 694
原创 hdu2083 简易版之最短距离
简易版之最短距离Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 11656 Accepted Submission(s): 5218Problem Description寒假的时候,ACBOY要去拜访很多朋友,
2014-11-08 22:51:58 475
原创 hdu2083 简易版之最短距离
简易版之最短距离Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 11656 Accepted Submission(s): 5218Problem Description寒假的时候,ACBOY要去拜访很多朋友,
2014-11-08 22:50:54 459
原创 hdu2095 find your present (2)
find your present (2)Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/1024 K (Java/Others)Total Submission(s): 15975 Accepted Submission(s): 6079Problem DescriptionIn the n
2014-11-08 22:34:17 442
原创 离别
noi终于结束了,而我的oi生涯也正式宣告结束。虽说告诫过自己不要后悔,但人就是这样,若有当初选择的是另一条路的话,会不会不一样?纵有千言万语却不愿在这说明,总之再见了oi,再见了!!
2013-07-20 04:42:08 411
原创 高斯消元
今天开始看高斯消元。高斯消元个人通过最近的一系列联系越发感到它的重要性。废话不多说,接下来就讲一下高斯消元。其实高斯消元这个东西并不困难,只要搞懂了它的原理,即使自己独立也可以写出来。首先推荐http://blog.163.com/baobao_zhang@126/blog/static/4825236720099202538409/,个人感觉他讲的挺好懂的。在讲高斯消元之前首先要明白线性
2013-06-21 22:01:41 713
转载 大白话解析模拟退火算法
(原文:http://www.cnblogs.com/heaad/archive/2010/12/20/1911614.html)一. 爬山算法 ( Hill Climbing ) 介绍模拟退火前,先介绍爬山算法。爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。 爬山算法实现
2013-06-20 19:14:25 382
转载 遗传算法入门
(原文:http://www.cnblogs.com/heaad/archive/2010/12/23/1914725.html) 遗传算法 ( GA , Genetic Algorithm ) ,也称进化算法 。 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法。因此在介绍遗传算法前有必要简单的介绍生物进化知识。 一.进化论知识
2013-06-20 19:11:41 440
转载 【专题】数位DP(按位DP)
(转自http://blog.csdn.net/cmonkey_cfj/article/details/7798809)数位DP•在给定区间[A,B]内,找满足要求的数。•要求一般和数大小无关,而与数的组成有关•例如,递增的,1234,2579…• 双峰的,19280,26193…• 含49的,49, 149
2013-06-16 23:51:20 584
转载 四边形不等式
(转自http://blog.163.com/lqp18_31/blog/static/54182769200991910199644/)我最惧怕的DP优化之一。 四边形不等式是一种比较常见的优化动态规划的方法: 设m[i,j]表示动态规划的状态量。m[i,j]有类似如下的状态转移方程:m[i,j]=opt{m[i,k]+m[k,j]}(
2013-06-16 22:39:24 504
原创 uva10405 Longest Common Subsequence
刷水题var i,j:longint;s1,s2:ansistring; f:array[0..1000,0..1000]of longint;function max(a,b:longint):longint;begin if(a>b)then exit(a) else exit(b);end;begin readln(s1); readln(s2); while(s1<
2013-06-16 16:21:54 445
原创 [bzoj1503][NOI2004]郁闷的出纳员
本题依然是一道数据结构题,对本题而言,依然可以用splay来解。本题的一个难点(对于我这个弱菜而言)是如何动态的改变平衡树中的值。其实我们可以借鉴线段树中的lazy tag的思想,因为若要变动则是整棵树一起变,所以我们可以开设一个全局变量delta表示此时对整棵树的改变值,这样一来,在每次插入节点x时,我们把x-delta插入平衡树中(想想这是为什么,不难),然后检查时若此时的节点y满足y+d
2013-06-14 19:54:11 709
原创 [bzoj1269][AHOI2006]文本编辑器editort
这道题跟noi2005的维护序列类似,而且要比它简单一点,故用splay的话,只要仔细认真即可,不是很难。值得注意一点是在找前驱,后继等点时,不需要单独写一个过程,只要找出它们的位置(即它们是序列中第几个字符)即可。const MAXN=2097152;type date=record ch:array[0..1]of longint; f,sz,rev:longint;c:
2013-06-14 16:31:10 828
原创 [bzoj1208] [HNOI2004]宠物收养所
本题考查的是数据结构,很基础的平衡树就可以解决,所以本题c++的同学可以用stl库开挂直接过的,而像我这种暂时不愿转c++的弱菜只好手写平衡树了。这题用splay做的话难度不是很大,一些基本的操作就可以解决问题,但是在写代码的时候还是得需要足够的细心和耐心。值得注意的是怎样判断当前树里记录的是宠物还是主人。不难发现,树里记录的不管是宠物还是主人操作都是一样的,所以可以开一个变量记录当前树里记录
2013-06-14 15:08:07 926
原创 [bzoj1500][NOI2005]维修数列
终于写过了,在这里庆祝一下。在开始前先推荐一篇论文运用伸展树解决数列维护问题,jzp大神写的关于splay树区间操作的方法。这题很考验代码的细节能力。(大神可以忽略下面弱菜的一些弱弱心得了)首先是初始化,初始化中的两个节点的初值应要因题而异,在本题中因为要求一个节点的max值,故两个节点的初值不能随便赋值,而应把初值赋为-INF,否则会导致结果错误。(在几千的数据里差错真心纠结....
2013-06-14 11:08:51 836
原创 poj2594 Treasure Exploration
这是个最小路径覆盖问题,但是因为有的点可以重复访问,所以最小路径是可以相交的,我们就用传递闭包建立新图(G’),转化为一般的路径覆盖,之后求法一样。var n,m:longint; g:array[1..500,1..500]of boolean; match:array[1..500]of longint; h:array[1..500]of boolean;procedure i
2013-06-13 18:48:13 488
原创 poj1548 Robots
看到这题可以发现是二分图最短路径覆盖问题,其实我们可以这样建图。以垃圾点为节点,若能从i走到j则连一条边,这样二分图就建起来了。(刚刚翻看了一下discuss,发现本题还有一个贪心的神解法,似乎要用到偏序集上的Dilworth定理,做法与poj1065,3636类似)var k:longint; a:array[1..1000,1..2]of longint; g:array[1..
2013-06-13 18:28:30 638
原创 poj2226 Muddy Fields
这题也是一道经典的最小点覆盖问题,但是注意本题中不是整行整列地消除,而是消除连续的格子,因此先把连续的格子当成一个整体标号,然后当行列相交时连边。var r,c,nx,ny:longint; s:array[1..50]of string; g,tx,ty:array[1..3000,1..3000]of longint; match,t:array[1..3000]of longin
2013-06-13 17:10:36 450
原创 最大匹配的Hopcroft-Karp算法
郁闷,csdn如何插公式?独立集:设 I 是 G 的一个点子集,若 I 中任意两个顶点不相邻,则称 I是 G 的一个独立集。最大独立集,指点数最多的独立集。根据定理,易知独立集与点覆盖互补。算法分为若干阶段,每阶段包含若下步骤:(1)将左侧未匹配点集设为起点,按照交错路径的条件,BFS,对图分层,在某层出现未匹配的右边点时停止(2)将左侧未匹配点集设为起点,按照层的顺序,和交错
2013-06-13 15:33:24 1681 2
原创 最小点覆盖
点覆盖:设 K 是图 G 的一个点子集,若 G 中的每一条边至少有一个端点在 K 中,则称 K 是 G 的一个点覆盖。最小点覆盖,指点数最少的点覆盖。könig Theorem(könig定理): 一个二分图中的最大匹配数等于这个图中的最小点覆盖数。证明: 假如我们已经通过匈牙利算法求出了最大匹配(假设它等于M),下面给出的方法可以告诉我们,选哪M个点可以覆盖
2013-06-13 14:54:37 2368
原创 poj3041 Asteroids
经典的最小点覆盖。对于一个小行星来说,要么清理该行,要么该列时清理掉,所以也就是每个小行星对应的行列中至少选择一样来清理。下面建图,如果我们把每行看成集合一中的点,每列看成集合二中的点,一个小行星看成是其对应行列的连线,那么也就是说不能存在某一条连线两边的点都没有被选中的情况。这恰好就是二分图最小点集覆盖的要求。var n,k:longint; g:Array[1..500,1..500]
2013-06-13 14:51:14 452
原创 poj3216 Repairing Company
这道题依然是最小路径覆盖裸题,以每个任务为节点建立二分图,之后再求最大匹配数,然后再用总任务数减去最大匹配数即可。var q,m:longint; a:array[1..200,1..3]of longint; dis:array[1..20,1..20]of longint; g:array[1..200,1..200]of longint; t,match:array[1..20
2013-06-13 14:22:02 609
原创 poj2060 Taxi Cab Scheme
这道题依然是一道裸的最短路径覆盖,注意建图。建图:以每个任务为节点,若是从任务i能在规定的时间内到达任务j,则从i连一条边到j。const MAXN=500;var tc,n:longint; a,as,ae:array[1..MAXN,1..2]of longint; g:array[1..MAXN,1..MAXN]of longint; match,t:array[1..MA
2013-06-13 14:00:04 516
原创 最小路径覆盖
路径覆盖:选取一些不相交的路径 (包括单个点),使得能覆盖所有的点。最小路径覆盖指路径覆盖中路径最少的一种。算法:(1)将有向无环图转为二分图(2)一组匹配等价于在原图中走了一条边(3)答案 = 原图点数 -最⼤匹配最小路径覆盖=|P|-最大匹配数;其中最大匹配数的求法是把图P中的每个顶点pi分成两个顶点pi'与pi'',如果在p中存在一条pi到pj的边,那么在二分图P
2013-06-13 12:51:55 500
原创 poj1422 Air Raid
本题若读懂题目就会发现是一道最短路径覆盖的裸题,之后先把无向图转化为二分图,然后再用匈牙利算法求出其最大匹配数,最后最短路径覆盖数就是n-最大匹配数。建图方法:先拆点,将每个点分为两个点,左边是1到n个点,右边也是1到n个点,然后每一条有向边对应左边的点指向右边的点即可const MAXN=120;var tc,n,m:longint; g:array[1..MAXN,1..MAXN
2013-06-13 12:45:28 490
转载 网络流算法整理
(转自http://blog.csdn.net/wangjian8006/article/details/7939599)EK(EdmondsKarp)算法:这个算法改进于Ford-Fulkerson算法,Ford-Fulkerson算法是不断用广搜找一条增广路,然后判断一次这条路的最小流量,再对这条路增流,而EK与FF算法不同的是用一个数组记录了广搜之后增广路的最小流量,然后再根据父亲数
2013-06-13 12:39:56 1375
原创 KM算法
算法原理:(1)通过给每个顶点一个顶标,把求最大权匹配的问题转化为求完备匹配的问题(2)设顶点 Ai 的顶标为 Xi ,顶点 Yj 的顶标为 Bj ,顶点 Xi与 Yj 之间的边权为 Wi;j(3)在算法执二过程中的任一时刻,对于任一条边 ,Ai + Bj >= Wi;j 始终成立(4)若由二分图中所有满⾜ Ai + Bj = Wi;j 的边 存在完备匹配,这个完备匹配就是⼆分图
2013-06-13 10:43:28 443
转载 KM算法 详解+模板
(转自http://blog.sina.com.cn/s/blog_691ce2b701016reh.html)【KM算法及其具体过程】(1)可行点标:每个点有一个标号,记lx[i]为X方点i的标号,ly[j]为Y方点j的标号。如果对于图中的任意边(i, j, W)都有lx[i]+ly[j]>=W,则这一组点标是可行的。特别地,对于lx[i]+ly[j]=W的边(i, j, W),称为可行
2013-06-13 10:38:15 695
原创 poj2195 Going Home
这题可以看出是一个裸的km算法题,直接套模板即可,同时要注意的是在算的时候先取反.(思路二:其实还可以转化为求最小费用,设一个超级源点把人连起来,各超级汇点把房间连起来,然后求解即可)var n,m,k1,k2,delta:longint; w:array[1..100,1..100]of longint; lx,ly,match:array[1..100]of longint;
2013-06-13 10:34:06 428
原创 poj2159 Ancient Cipher
POJ2159 Ancient Cipher一道简单的字符串处理题,其实只要读懂题意,就不难想出算法。对于一般的字符串处理题其实大多可以用hash来处理,故下面采用一种字符串hash的方法var s1,s2:string;i,hash1,hash2:longint; h1,h2:array[0..26]of longint;begin readln(s1); readln(s2)
2013-06-13 09:42:03 472
转载 二分图匹配算法总结
(转自http://blog.163.com/baobao_zhang@126/blog/static/482523672008631103625967/)一、二分图最大匹配 二分图最大匹配的经典匈牙利算法是由Edmonds在1965年提出的,算法的核心就是根据一个初始匹配不停的找增广路,直到没有增广路为止。 匈牙利算法的本质实际上和基于增广路特性的最大流算法还
2013-06-04 23:17:55 740
原创 [bzoj1003] [ZJOI2006]物流运输trans
不难想到本题的方程为f[i]=min(min(f[j]+cover(j+1,i)*(i-j)+k)(0,其中cover(x,y)为若第x天到第y天走相同的路的最短路(注意cover(x,y)可能并不存在!!)之后的就是实现的问题了,由于最近非常不仔细,连一道最裸的完全背包题都因为输入输出调上30+分钟,故代码很挫,各位神犇不要鄙视...const MAXM=20; MAXN=100;
2013-06-04 20:46:26 1354
原创 poj2446 Chessboard
继续发二分图匹配的题。本题比较容易想到要在能放的格子间建立二分图,但在实际中建图可能会比较麻烦。其实,可以在每个相邻的格子连两条反向的边,然后进行二分图匹配,所得的匹配数应是m*n-k.(之前在网上看到的另一种思路,可以发现任何相邻两点的各自的横纵坐标之和必是一奇一偶,故可以以和为奇的点为左边的点,和为偶的点为右边的点,然后二分图匹配,此时所得的匹配数应是(m*n-k)/2).co
2013-06-04 19:51:06 516
原创 poj2239 Selecting Courses
最近在学二分图匹配(是的,你没看错,我也没开玩笑,对此我也很无奈),继续发匹配的水题。poj2239其实很容易就可以看出来可以把课程跟日程建立二分图,然后用匹配做。var n,i,j,p,q:longint; a:array[1..310,1..310]of longint; t:array[1..310]of longint; match:array[1..310]of long
2013-06-04 19:40:21 491
原创 poj1274 The Perfect Stall
usaco上的一道二分图匹配模板题,直接用匈牙利即可。注意不要直接交usaco程序var n,m,i,j:longint; a:array[1..200,1..200]of longint; s,match:array[1..200]of longint; h:array[1..200]of boolean;function check(v:longint):boolean;var i
2013-06-04 19:35:00 495
原创 poj2536二分图匹配
又是一道二分图匹配的裸题,其实只要把每只地鼠和其能跑到的洞穴连条边后用匈牙利算法即可。注意题目要的是不能跑到洞穴的地鼠数!!var n,m,sec,v:longint; a:array[1..100,1..100]of longint; s,match:array[1..100]of longint; h:array[1..100]of boolean;procedure i
2013-06-04 19:32:06 416
原创 uva111
uva111是一道简单的dp只要读懂题目,几分钟就可已搞定,只不过要注意输入的是时间顺序,且要注意输入格式!!var n,i,j,x:longint; a,b:array[0..100]of longint; f:array[0..100,0..100]of longint;function max(a,b:longint):longint;begin if(a>b)then ex
2013-06-03 09:25:43 432
Machine Learning Tom M.Mitchell
2016-01-30
DeSmuME 0.9.10源代码
2014-10-11
Orwell Dev-C++ 5.7.1源代码
2014-10-11
运用伸展树解决数列维护问题 by Crash
2013-06-14
notepad++6.2.3源代码
2013-06-03
图论总结by amber
2012-10-25
notpad++6.1.5源代码
2012-08-10
7zip9.22源代码
2011-07-06
Visual Studio 2010 高级编程(英文)part3
2010-07-31
Visual Studio 2010 高级编程(英文)part2
2010-07-31
Base64编-解码器 1.5
2009-07-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人