- 博客(22)
- 资源 (4)
- 收藏
- 关注
原创 POJ 2976 01分数规划
刚做完了最优比率生成树 就瞬间来了感觉了题目大意就 给定n个二元组(a,b),扔掉k个二元组,使得剩下的a元素之和与b元素之和的比率最大题目求的是 max(∑a[i] * x[i] / (b[i] * x[i])) 其中a,b都是一一对应的。 x[i]取0,1 并且 ∑x[i] = n - k;那么可以转化一下。 令r = ∑a[i] * x[i] / (b[i]
2012-04-23 20:51:26 1541
原创 POJ 2728 最优比率生成树 01分数规划问题
网上有一些很数学的证明方法,表示看的挺晕,自己理解了一下后,发表下自己的看法,如果有错误,再进行修改其实原题就是求 MIN( ∑CiXi / ∑DiXi ) Xi∈{0,1} ,对每个生成树,设其比率r=∑CiXi / ∑DiXi ,可得∑CiXi - ∑DiXi * r=0(条件1)那么对于所有的生成树,显然∑CiXi - ∑DiXi * min(r) >= 0,当 ∑CiX
2012-04-23 18:58:49 4858 2
原创 POJ 1470 LCA 公共祖先
裸题一个/*ID: CUGB-wwjPROG:LANG: C++*/#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #in
2012-04-21 10:57:09 917
原创 POJ 2874 LCA 树上任意两点距离
本题说了是无环图,所以就是一片森林了。 而对于树上的任意两点,我们可以用LCA求其距离。距离为两个子节点到根的距离和减去最近祖先到根的距离的2倍。具体画图便可看出来。 并且图是无向图,所以LCA时需要进行标记POJ 1986同这道题 基本一样/*ID: CUGB-wwjPROG:LANG: C++*/#include #include #include #incl
2012-04-21 09:51:37 5526
原创 POJ 3233 矩阵快速幂
其实就是考擦构造矩阵。 我瞎构造也能构造出来我构造的矩阵是Let B = A A 0 I然后看discuss里这么构造了一个矩阵Let B= A I 0 I B^(k+1) = A^k I+A+...+A^k
2012-04-16 18:20:38 1063
原创 POJ 1087 A Plug for UNIX 最大流
看完题以后就觉得是个最大流了。然后脑子不太清醒,想了一会儿才发现建图好简单啊,不过中间理解错题意了,题目中说有K种适配器,也就是说每种适配器的数量是无限个的,而我理解成了K个适配器了。。。 然后就WA了几次。。。建图: 加一个超级源点, 超级汇点。 源点与每个电器相连,容量为1,每个电器与其相应的插座相连,容量为1,插座之间能转化的就连一条无限容量的边,最后每个插座跟汇点相连,容量为这种
2012-04-16 17:29:38 1056
原创 HDU 2121 无固定根的最小树形图
参考了http://blog.csdn.net/wsniyufang/article/details/6747604本题为不是固定根的最小树形图,我们可以虚拟出一根来,然后在把这个根跟每个点相连,相连的点可以设为无穷大,或者设为所有边和大一点,比如为r,然后就可以利用最小树形图进行计算了,计算出的结果减去r,如果比r还大就可以认为通过这个虚拟节点我们连过原图中两个点,即原图是不连通的,
2012-04-14 02:00:42 1271
原创 POJ 3164 最小树形图 朱刘算法
参考了芳哥的博文 http://blog.csdn.net/wsniyufang/article/details/6747392说一下自己的理解。最开始的图,把所有的最小入边都累加到ret里。至于为什么,因为这样才能保证所得的ret有可能是最小树形图的解,当然,是在这些最小入边集合不行成环得情况下。如果有了环,ret肯定不是最终答案,因为环中间有的边需要删掉,而且环之间也要连接起来。现
2012-04-14 01:17:56 14366 4
原创 HDU 1823 二维线段树
题意就不赘述了。二维线段树,第一维是高度,第二维是活泼值, 然后建立树套树。/*ID: CUGB-wwjPROG:LANG: C++*/#include #include #include #include #include #include #include #include #include #include #include #incl
2012-04-13 20:33:30 1126
原创 HDU 3609 高次幂取模
题意不再赘述具体运用见初等数论/*ID: CUGB-wwjPROG:LANG: C++*/#include #include #include #include #include #include #include #include #include #include #include #include #include #include
2012-04-13 12:04:08 922
原创 HDU 3607 线段树+DP
这题最裸的方法因该是O(n2)的。dp[i]=max(dp[j])+gi(1hj) 其中dp[i]代表的是前i下能拿的最多的钱。 但这个数据范围有点大,是10W 之多。 在hi > hj这个限制下,我们可以联想到,不就是找比hi小的高度中能获得的最多的钱的那个状态么,再由数据范围,容易联想到用线段树优化这个过程。那么就先把所有的高度都离散化,然后每次先进行查询,将比hi小的高度中钱最多的状态找出,
2012-04-13 10:31:17 818
原创 HDU 3605 Escape 最大流
题目大意不再赘述,很容易看出来是最大流,只不过人比较多,有100W个,所以需要进行压缩,可以看到m是比较小的,非常容易就能联想到2进制,所以就压缩成了1024个节点,每个结点有一个值,代表有多少人是这个状态,然后建立超级源点, 超级汇点,源点与1024个结点连线,边权为结点的值,然后每个源点再与m个星球进行连线,边权为无限大,然后每个星球再与汇点进行连线,值为该星球的容纳量。/*
2012-04-13 10:21:14 1222
原创 POJ 3436 最大流
很羞愧啊 , 题都没看咋懂翻译见:http://hi.baidu.com/lewutian/blog/item/1b0709220085b7fed7cae28b.html/cmtid/87a1a0ad1aebe6064b36d60e题解参考了:http://zhyu.me/acm/poj-3436.html ,BUPT一位现役神牛的blog每台机器分输入输出,很显然直接拆点,每
2012-04-11 21:01:26 979
原创 HDU 3991 最短路+最小路径覆盖
题目大意就是,有一个图,上面有一些顶点,代表一些城市,在某些时刻, 某个城市里会有人需要礼物, 哈利波特需要及时的将礼物送到,但是哈利每1秒只能走一个单位长度,所以他需要朋友的帮助,来使所有的人都能及时的收到礼物。问需要的最少的朋友个数。那么看完题目后,实际上可以发现其跟路径覆盖非常有关系,因为是一些人走一些路径来将礼物送到。所以要先将任意两点间的最短路求好。然后枚举任意两个任务,
2012-04-10 22:43:57 741
原创 HDU 3988 数论
考察的知识点很简单,就是分解质因数,和求出阶乘内某个质因子的个数。分解完质因子后,记录下每个质因子的个数,然后计算阶乘内该因子的个数,所有的求完后即可得到答案/*ID: CUGB-wwjPROG:LANG: C++*/#include #include #include #include #include #include #include #include #i
2012-04-10 22:36:47 1066
原创 HDU 3987 最小割模型
读完题后,就知道是最小割了,最小割=最大流,但是题目又说要最少边的最小割,输出边的个数这样建边得时候就要换种方式了,将边权w变为w *(E + 1) + 1,这时候求出的最大流实际上附带了一个信息,就是边的个数,最后的结果直接mod (E+1 )即可/*ID: CUGB-wwjPROG:LANG: C++*/#include #include #include
2012-04-10 22:34:18 992
原创 HDU 3986 最短路+枚举
这题HDU 1595 find the longest of the shortest 就是一模一样的但是出现了重边,就比较恶心人了然后就将输入的数据先排序,然后出现重边的肯定在一块,然后对每条边存储的是它最短的情况和次短的情况即可/*ID: CUGB-wwjPROG:LANG: C++*/#include #include #include #include #
2012-04-10 22:30:26 912
原创 POJ 3020 最小边覆盖
题目大意就是有一些'o'和'*'构成的图,每个*可以与其四周的'*'连一条边,但是连完之后这两个‘*’就称作被覆盖了,不能与其他的'*'发生交集了。 然后问用最少的边能把所有的‘*’都覆盖掉看到是两两连边不由得想起二分图匹配,实际上就是用最少的边覆盖所有的点的问题,我觉得最小边覆盖实际上就是最小路径覆盖的一个特殊情况,只不过要求必须是二分图才行而最小路径覆盖只要是PxP的有向图就行。 而他
2012-04-10 09:52:55 2399
原创 HDU 3938 Portal 并查集
给一个无向图,求有多少个点对,使得两点间的路径上的花费小于L,这里路径上的花费是这样规定的,a、b两点之间所有的路径中的最大边的最小值。 当然题目上不是这么写的。它问的是有多少种路径,这里就比较模糊了,到底两个路径怎样才算是两种路径呢,这时候重新看题,可以发现,如果理解为路径中经过的点不同的话,题目中给的所谓两点间的花费这个定义就没有意义了,所以就可以猜测,题目要求的是有多少个点对了。
2012-04-09 00:05:18 1752
原创 POJ 1466 Girls and Boys 最大独立集 二分图匹配
大意就是有n个人,每个人与其他的某几个人有关系,这个关系且称为浪漫关系,然后最后求一个最大的集合,使得集合中所有的人两两之间都不存在浪漫关系。看到之后就可以发现,这是一道非常明显的最大独立集的问题,可以转化为二分图来做,还是最经典的拆点建图,然后根据定理,最大独立集=顶点数-最小点覆盖数。 而对于这道题来说,我们可以发现这个浪漫关系是相互的。而我们的建图中,按理来说应该是一边是男
2012-04-04 21:57:41 1818
原创 POJ 3321 apple tree 树状数组
题目大意,就是给出一棵树,可能有很多叉,然后每个叉上长一个苹果,有两种操作,第一种是C ,意思就是change,如果这个叉上有苹果,就摘掉,如果没有,就长一个。另一种操作是Q,意思就是询问,问的是某个结点及其子树上的苹果有多少个。这是很明显的区间求和问题,用树状数组来很方便,关键是这个是树形的结构,所以必须先把树映射出来,也就是相当于把数据离散化了,这里就要先进行一次DFS了,开两
2012-04-04 17:02:32 1221 1
原创 POJ 1840 Eps 简单Hash
a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 对于这个等式,给出了a1到a5,最后求有多少组X1---X5满足这个等式,其中所有的Xi都是不能等于0的。然后每个Xi的范围是-50到50。这个数据范围是能hash的保证。分成两组,前3个X是一组,后两个一组。/*ID: sdj22251PROG: LANG: C++*/#include
2012-04-03 14:04:46 1058
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人