自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一点一点的进步

  • 博客(28)
  • 资源 (4)
  • 收藏
  • 关注

原创 POJ 2676 3074 3076 数独3题 Dancing Links

今天就一直在做DLX的题目了,目前也只是入门而已,就做了几个数独的问题将数独转化为DLX的模型是很繁琐的一部分。首先,必须明白,有多少种选择就要建立多少行,有多少个条件约束就要建立多少个列对于一个9*9的数独,我们可以在81个位置中选择一个地方,放1~9的数,所以选择数目就是9*9*9了,就要建立这么些个行而约束呢,首先是81个格子,每个格子有且只能有1个数,那么就是9*9个列,然

2012-01-30 23:12:48 1373

原创 POJ 2182 Lost Cows 线段树 or 树状数组

这道题还是很经典的给出了一个序列,代表的是比该位置的牛靠前站的且序号比他小的牛的个数然后思想类似于2828,正序看的话,看不出有什么规律,但是逆序的话,就能看出当前序列的最后一头牛的编号是可以确定的,就相当于有一个队列,初始化全为1,有牛占了就把相应位置变为0,然后我们只管那些位置为1的地方,往里一头一头的塞牛,塞一头,能塞的地方就少一个,但是和之前塞过的就没关系了,这也符合题目中,只管比

2012-01-29 17:09:39 935

原创 POJ 1026 Cipher 置换群

题目大意就是给出1~n的置换序列, 然后给出一个整数k,和一个串问置换k次后的串是什么样子的。首先,给出的串的长度是小于等于n的,不足的位置要补上空格。然后置换k次,不是直接就循环着置换,因为置换内的每个循环都是有一定长度的,如果超过这个长度的置换次数,必然会和前面的某个状态一样,所以对每个循环,如果长度为len,循环内的元素只需要置换k%len次即可。第一次看置换群得概念,不

2012-01-29 15:36:33 1063

原创 POJ 1195 Mobile phones 二维树状数组

二维树状数组是为了矩阵的某个区域快速求和,其原理是一样的,可以对每一维都是用树状数组的原理求和,就相当于把二维数组当做一个一维数组,每个元素又都是一维数组,比如,里面的那个循环是把行的和求出来,外面的循环则是把这些和的和求出来,从而能求解矩阵某个区域的和。这道题需要注意的就是下标是从0开始的。/*ID: sdj22251PROG: inflateLANG: C++*/#inc

2012-01-28 17:55:03 921

原创 USACO Section 2.3 The Longest Prefix

原来觉得挺不容易做的一题,今天一看,如此之水。用dp[i]表示前i个字符是否能由集合中的元素表示初始dp[0] = 1然后对每个位置i,枚举所有的字典中的元素,设该元素长度为j ,则把i-j 到i之间的字符串跟该元素比较,若能匹配并且dp[i - j]为1,则更新dp[i],不过貌似复杂度很高的样子2000*200000,觉得应该过不掉,结果还是过了,网上大多数人也都是用这样的3重

2012-01-26 18:34:37 702

原创 POJ 2407 Relatives 欧拉函数

题意很明确,比n小且与n互质的数的个数欧拉函数就是用来解决这个的首先要知道 【定理】正整数n(n≥2)可以唯一分解成素数乘积,即:n =p[1]^r1 * p[2] ^r2 * p[3]^r3. *...* p[s]^rs其次欧拉函数有两个性质,可以用来编程,单独求phi函数:① Ø(m) =  m ( 1- 1/p[1]) ( 1- 1/p[2])…( 1-

2012-01-24 15:23:44 797

原创 POJ 1942 Paths on a Grid 组合数

这道题其实就是组合数,题目给了m,n,实际上路径的长度已经确定了,就是m+n,但在这些路径中必须有m个向右走的,n个向上走的,这样才能到达终点这就变成了求组合数C(m + n, n) 其中n必须是m,n中较小的那个,这样速度还快些在求组合数的时候,要避免的是越界问题,所以每次我都是先除,然后再乘,除的时候也不能直接除,一定要求了公约数后再除,这样才是整除。/*ID: sdj22251

2012-01-24 13:09:46 895

原创 POJ 3070 Fibonacci 矩阵快速幂

题意很明确,求第m个斐波那契数MOD10000的结果题目连矩阵都构造好了,就是 1   11   0然后对这个求幂就行了/*ID: sdj22251PROG: subsetLANG: C++*/#include #include #include #include #include #include #include #include #include

2012-01-23 20:31:54 2895

原创 POJ 1129 Channel Allocation 平面图染色问题

这题大意就是,给出一个平面图,对顶点进行染色, 相邻顶点是不能用同一种颜色。由四色定理,我们知道任何平面图的色数是不超过4的,所以运用这个进行暴搜,当然这题的数据不强,DFS或者贪心搞都能过/*ID: sdj22251PROG: subsetLANG: C++*/#include #include #include #include #include #includ

2012-01-23 19:13:36 913

原创 POJ 2823 Sliding Window 单调队列+输入输出外挂

题解:来自http://hi.baidu.com/wzyjerry/blog/item/3838f48af40e40cafd1f1089.html题目大意:给你一个长度为n的数组,求从左到右的每个相邻的长度为k的区间内数的最大值和最小值。解题方法:这道题数据较大(n最大为10^6)所以用纯模拟O(n*k)是铁定挂掉的,写的好的线段树可以卡时间过去。这里我们选择更为合适的单调队列解决

2012-01-23 15:25:50 1080

原创 POJ 3592 Instantaneous Transference 强连通分量+缩点+DP

这是一道变形题,不得不说是好题啊题目大意是,有一张n*m的地图,每个点上可能是数字,代表矿石的数目,可能是*,表示一个传送阵,送往某个坐标,可能是#,代表不通。每次矿车只能往右方或者下方走一格,那么这就可以转化为一个有向图了。每个点,往其右方和下方相邻的点建有向边,如果是#,就不建边了,如果是*,就要把*的位置跟其传送的位置建一条边。之后就要求强连通分量,然后缩点了,再之后就是DP求最

2012-01-21 22:31:39 1092

原创 POJ 1904 King's Quest 强连通分量 +缩点+ 输入输出外挂 (非递归版trajan模板)

这道题很神奇,尤其是背景最神奇,国王竟然能有2000个儿子。首先,看完题后第一感觉跟二分匹配有关系,结果最后给了一组完美匹配,于是,如果男的喜欢女的就连一条单向边过去,最后那组表示结婚的,就让女的连一条单向边给她丈夫,然后我们观察这个图,如果一个女的能跟这个男的结婚,首先男的必须喜欢她,然后通过这条边过去,到女的结点,然后从女的结点出发,必然能回到这个男的结点处,而且,如果这个女的不是这个男的

2012-01-21 21:00:11 1330 1

原创 POJ 3160 Father Christmas flymouse 强连通分量+缩点+DP

这道题的大意就是,给出一个有向图,每个点有一个点权,点权可能是正也可能为负,一个人从某点出发,沿着一些路,访问结点,或者仅仅是路过这个结点,而不去访问,最后求他能访问到的最大的点权和。我们注意到,他对某个结点是可以选择访问或者不访问的,那么只用访问那些点权为正数的点了。首先,求强连通分量,缩点,然后新点的点权就是原强连通分量中,所有正点权之和。之后就要进行DP求解,我在本题中使用了Ko

2012-01-21 18:50:35 867

原创 POJ 3013 Big Christmas Tree 最短路

题目大意是:有一些点,每个点都有一个重量值,然后给出了一些边,每个边都有一个权值最后让用一些边组成一棵树,使得花费最少,每个边(u,v)的花费=(边得所有子孙节点的重量和)*(该边的权值)对于这个花费,可以看出,对于每条边(u,v),其花费就相当于每个在后面的结点都走了这个边一次,那么我们可以假想,已经形成了最优的树,观察这颗树,就能发现,对于一条边(u,v),由于边的子女都走了这

2012-01-21 02:51:52 1310

原创 POJ 2553 The Bottom of a Graph 强连通分量+缩点 tarjan or kosaraju

题目的意思是求有向图中满足“自己可达的顶点都能到达自己”的顶点个数显然,在一个强连通分量中,每个点都符合要求,但是 如果强连通分量中有某个点跟外面的某个点相连了,这个强连通分量就不符合要求了,很显然,外面的点是无法回到这个点上的,如果能回到这个点,就是强连通分量中的一员了,这是矛盾的。那么结论就是,缩点后,求出度为0的强连通分量中的顶点。tarjan写的#include #inc

2012-01-21 01:09:27 928

原创 POJ 2762 Going from u to v or from v to u? 图的单连通性 tarjan or kosaraju

虽然本题是求单连通的,但是我们需要先求强连通分量,因为,强连通分量中存在双向路径,因此可以缩点,缩点后就好处理多了。如果要满足题意,缩点后的树必须是一条链,而且所有边的方向都是一样的,如果出现分支,很容易证明会出现不可到达的一对点。那么剩下的就是求最长链的顶点数是否等于强连通分量的个数了。那么就可以使用拓扑排序,或者直接DFS。拓扑排序中,不能出现同时有两个点的入度为0。DFS

2012-01-21 00:37:08 1044

原创 POJ 2186 Popular Cows 强连通分量 Kosaraju or tarjan

题目大意是:在一个牧群中,有N个奶牛,给定M对关系(A,B)表示A仰慕B,而且仰慕关系有传递性,问被所有奶牛(除了自己)仰慕的奶牛个数因为仰慕关系具有传递性,因此在一个强连通分量中,每个奶牛都被分量中的其他奶牛膜拜,而且也膜拜着分量中的其他奶牛,这种互相膜拜的场景在现实生活中也是经常存在的,因此,本题可以将强连通分量缩点,并构造新图,最后做一次扫描,统计出度为0的点的个数,如果正好为1,表示这

2012-01-20 20:50:01 1000

原创 POJ 3694 Network 割边+LCA

这道题跟3177意思差不多,不过最后问的不一样,说是加入某条边后,问图内剩余的桥有多少。这题的大概思路就是,先求割边并标记,然后缩点,形成一棵树,然后把这颗树上各个结点的父结点用dfs求出来,再然后就是LCA了,因为加入某条边后,树内会形成一个圈,这个圈上所有的边将不再是桥,可以发现跟LCA的关联。求LCA用裸的方法就行,比较直观些,也好操作。实际上,这道题也不一定要缩点,

2012-01-20 01:31:30 4647 6

原创 POJ 3177 Redundant Paths 边的双连通分量

转自韦广:http://blog.csdn.net/weiguang_123/article/details/7538184题目大意:每头牛希望在任意两个点u和v之间,从u到v有两条完全不同的路径。在一个双连通块里面,任意两个点之间都有两条完全不同的路径,这里的完全不同,指的是两条路径不共享任何一条边。这题要的是我们求出我们需要增加多少条边才能让整个图变成一整个双连通块。很明显这里

2012-01-19 18:01:50 1915 3

原创 POJ 2942 Knights of the Round Table 点重连通分量+交叉染色判奇圈

这道题的意思是,一群武士,某些武士之间相互仇视,在一起会发生争斗事件,因此只有满足一定条件才能够参加圆桌会议。首先是圆桌上相邻的两个武士不能有仇,同一个圆桌上的武士数量必须是奇数,而且大于2。最后求完全不可能参加会议的武士的数量。那么可以联想到转化为一个无向图,各个武士看成顶点,互相没仇的武士之间建边,表示可以坐在一块,建立无向图后,所有能坐在一起的武士分为一组,这一组在图中必然就

2012-01-19 14:50:59 1909 1

原创 Codeforces Round #103 (Div. 2) D题 SPFA

题意就是求离源点距离为L的点的个数,点可以在节点上,也可以在路上,但是必须都是到源点的最短距离为L用SPFA求一遍距离,然后扫描一遍点,再扫描一遍边扫描边得时候注意了,有的边上有1个位置,有的边上有2个位置,并且要去重/*ID: sdj22251PROG: subsetLANG: C++*/#include #include #include #includ

2012-01-19 02:31:44 910

原创 ZOJ 2588 Burning Bridges 求割边

求割边,实际上跟求割点类似,dfs的过程中就能求出割边,判断条件变为low[v] > dfn[u]和(u,v)不能是重边 我用的邻接表存储,结构体中新增的一个变量,用来判断是否有重边每次插入边之前先扫描一遍该点的邻接点,看是否已经存在一个边/*ID: sdj22251PROG: subsetLANG: C++*/#include #include #inclu

2012-01-17 23:51:24 1068

原创 POJ 1966 Cable TV Network 无向图的点连通度

求无向图的点连通度,一般的方法就是转化为网络流来求解构建网络流模型:若G为无向图:(1)原G图中的每个顶点V变成N网中的两个顶点V'和V'',顶点V'至V''有一条弧容量为1;(2)原图G中的每条边e=(U,V),在N网中有两条弧e'=(U'',V'),e''=(V'',U')与之对应,e'与e''容量均为无穷;(3)以某点为源点,枚举汇点,求最大流。其中源点的确立有一

2012-01-17 18:03:23 1222

原创 POJ 1523 SPF 求割点

这道题的大意就是求割点,并且求出假如去掉这个割点后,整个图被分为了几部分看的北大那本图论书,无向图的点连通性的求解。然后就把代码打上来了。书上是用邻接矩阵存储,我改用了vector并且书上的代码也有一些问题,就是没有处理好边和回边的问题因为low数组的定义,就是low[u] = min(dfn[u], low[w], dfn[v])其中w是u的子女,而(u,v)是一条回边

2012-01-15 22:51:02 986

原创 POJ 1141 Brackets Sequence

这道题是黑书上的一个例题,不过没有给出最终输出的串,但是可以通过递归把最后的串输出首先我们定义d[i][j] 为从i位置到j位置的串匹配所需的最少步数那么当s[i] = '('&& s[j] =')' 或者s[i] = '['&&s[j] =']'时,显然d[i][j] = minI(d[i][j], d[ i + 1][ j - 1])然后当s[i]和s[j]不匹配的时候,就要对串进

2012-01-14 15:56:46 509

原创 POJ 2195 Going Home 最小费用最大流 or KM算法

题目大意是一张地图中,有n个人要走回n个房子里,然后人只能横着或竖着走一格,求他们回家的距离总和最短。这道题看起来是个最优匹配问题,用KM或者最小费用最大流做首先把每个人与每个房子之间的距离求出来然后就是套用模板了#include #include #include #include #include #include #include #include #in

2012-01-14 11:32:29 853

原创 POJ 1330 Nearest Common Ancestors Tarjan求LCA

这道题就是传说中的LCA了,从网上找了一个模板,用数组模拟的树大概的原理, 大概就是:首先,把每个节点的祖先标记为自己,如果在一个子树内没有解决查询的LCA问题,那么该子树的所有节点的都将直接或间接的指向该子树的直接父亲,也就是子树内的所有节点的祖先都是该子树的父亲,然后就可以在该父亲的其他儿子中寻找。#include #include #include #include #i

2012-01-13 21:09:10 759 1

原创 几道动态规划题目

1. POJ 1080 Human Gene Functions这道题我们需要分3种情况,假设两个串分为s1, s2设dp[i][j]表示i长度的s1 和j长度的s2所匹配得的最大分值则有以下几种情况1)s1取s1[i],s2取s2[j] ,dp[i][j] = dp[i - 1][j - 1] + score(s1[i], s2[j])2)

2012-01-12 19:39:14 598

归并排序实现

使用C++实现了归并排序,有注释,简明易懂

2013-06-11

堆排序实现

使用C++实现了堆排序,有注释,简明易懂

2013-06-11

插入排序实现

使用C++实现了插入排序,有注释,简明易懂

2013-06-11

java 俄罗斯方块源码

代码可直接运行, 主要功能有基本的俄罗斯方块,加速,开始,暂停等

2011-12-19

空空如也

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

TA关注的人

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