自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

林伏案的博客

伏案的学习笔记

  • 博客(30)
  • 收藏
  • 关注

原创 poj3293(几何扫描线+并查集)

/*translation: 给定N个点,问是否能组成直角多边形(每个顶点都与另外两个顶点构成直角,每条边都平行于坐标轴),并求出周长solution: 扫描线,并查集 横着扫描一遍,并将总坐标相同的相邻两个连起来,如果到最后剩下一个单独的点,那么答案肯定就为-1.竖直方向一样。 注意最后还要判断是否联通(考虑用并查集)以及横线和竖线是否有相交。*/#include #inclu

2017-02-28 22:35:13 418

原创 poj3246(*凸包)

/*translation:给出n个点,求去掉一点后,再求凸包,所能得到凸包最小的面积是多少?solution:很容易想到去掉的点肯定在凸包上面。所以对上面的点一一枚举,然后维护最小答案即可。note:* 想半天只想到去掉的点肯定在凸包上,然后暴力枚举上面的每一个点。但看了下数据范围又否决了自己的方法。 但是万万没想到题解就是按照暴力来写的,这数据明显偏弱了。不然如此暴

2017-02-28 20:46:50 347

原创 poj3608(旋转卡壳求两凸包间的最短距离)

/*translation: 求两个凸包间的最小距离?solution: 旋转卡壳法。note: * 网上给出的资料都差不多,具体如下: 1. 计算凸包P在y轴方向上的最小值记为yminP,和凸包Q在y轴方向上的最大值记为ymaxQ。 2. 建立两条紧贴着yminP, ymaxQ的两条水平的直线LP, LQ。要求他们指向不同的方向。这时候他们就形成了一对anti-podal pai

2017-02-27 22:34:50 582

原创 poj1113(凸包)

/*translation: 用一条线把若干个点包起来,并且线距离任何一个点的距离都不小于r。求这条线的最小距离是多少?solution: 直接求凸包,然后凸包的周长加上一个圆的周长即可。*/#include #include #include #include #include #include using namespace std;const int maxn =

2017-02-26 10:50:57 257

原创 poj3168(扫描线)

/*translation: 给出几个长方形的位置以及边长情况,问能扩张的长方形有几个。solution: 从上到下,从左到右扫描两边。预先对每条边排序,扫到这条边时,对其和这条边位置相同的边进行判断,是否有 重合的点。如果有,那么这两条边各自对应的长方形就不可能扩张了。note:*/#include #include #include #include using na

2017-02-26 10:46:45 806

原创 poj2187(凸包)

/*translation: 给出n个点的位置,计算出距离最远的一对点的距离。solution: 求凸包然后枚举凸包上的点计算即可。note: * 旋转卡壳法更加高效。*/#include #include #include #include #include #include using namespace std;const int maxn = 50000 +

2017-02-26 10:42:18 334

原创 aoj2201(极限情况)

/*translation: 有n个宝石,宝石为圆形。给出现在有根金属棒,靠近宝石距离m之内就会吸附上去。现在给出每颗宝石的信息,求用这个棒子一次 能钓出最多多少个宝石?solution: 极限情况 每个宝石可以看成两个圆(本来的圆+半径加上m的圆)。对这些圆形一一枚举,即可求出各自的公切线(即金属棒)。然后 求出此时能吸附多少宝石。逐一更新即可。note: # 为何最后计算吸附

2017-02-26 10:33:36 301

原创 poj2079(*凸包内最大三角形面积)

/*translation: 给出一组点,从这些点里面选择三个点构成三角形。求这个三角形面积最大是多少?solution: 凸包 很容易想到三角形的三个点肯定在凸包上面,但是关键怎么找出来三个点。一一枚举肯定超时。note: * 如果固定一条边的话,那么枚举剩下的一个点,在枚举过程中面积肯定有达到极大值后又减小。根据这一特性,可以先固定 一点i,然后让另外两点a,b不断旋转来找

2017-02-25 16:41:51 1448 3

原创 poj1981(几何极限情况)

/*translation: 给出若干个点的位置,求一个半径为1的圆最多能够覆盖多少个点?solution: 极限情况 先枚举两个点,假设这两个点恰好在圆上。然后计算这个圆包含的点个数即可。note: * 还有一种更为高效的写法,枚举一个点,假设该点在圆x上,则圆心必然在以该点为圆心的圆i上。此时x要覆盖尽量多的点, 所以对以枚举的点为圆心的圆求出和其他点为圆心的圆的交点,被覆

2017-02-25 09:22:48 503

原创 aoj2308(#离散化,极限情况)

/*translation: 可以从任意方向以速度v发射一只白鸟,可在任意时刻产下一枚卵。发射后鸟将以抛物线轨迹飞行。空中有若干障碍物,问鸟 产下的卵是否能击中目标(x,y)solution: 极限情况的离散化note: * 考虑到鸟的飞行轨迹是无数种方案的,所以只需考虑其中的极限情况,即擦着障碍物的边飞过去。所以可以枚举飞行轨迹 经过的点,也就是

2017-02-22 16:57:31 444

原创 poj2932(几何扫描线)

/*translation: 给出n个两两不相交的圆,求出那些不被任何圆包含的圆的编号solution: 平面几何扫描线note: * 首先对每一个圆的水平方向的两个端点进行排序处理。然后用一条扫描线从左到右扫描。遇到圆的左端点 就判断是否被其它圆包含,如果是,加进set容器中(保存的全是没有被包含的圆)。遇到右端点,从容器 中删除 *

2017-02-22 16:55:57 497

原创 poj1127(计算几何,并查集)

/*translation: 给出n根木棍的端点位置,然后问任意两个木棍是否连通solution: 计算几何,并查集 首先计算出任意两个木棍之间是否有公共端点,如果有,就对两个木棍的编号进行并查集的unite操作。 这样到最后只需要判断根节点是否相同即可。*/#include #include #include #include using nam

2017-02-22 16:54:45 289

原创 hdu4322(*最小费用流)

/*translation: n颗糖果,m个孩子。每个孩子有若干个自己喜欢的糖果。一旦这个孩子得到一颗自己喜欢的糖果,这个孩子的欢乐值上升k。如果 得到一颗普通的糖果,欢乐值上升1,一旦孩子的欢乐值达到b[i],这个孩子就很开心。问能否有一种分配方法,使得所有的孩子 开心?solution: 网络最小费用流note: * 由于边费用1的不好处理,所以可以i先处理边费用为k的,再上面

2017-02-21 16:52:32 390

原创 hdu4780(*最小费用流)

/*translation: M台机器要生产n个糖果,遵循如下规则: 1.糖果i的生产区间在(si, ti),花费是k*(pi-si),pi是实际开始生产的时间 2.机器j从初始化到生产糖果i所需的时间Cij,花费是Dij 3.任意机器从生产糖果i到生产糖果j,需花费时间Eij,花费Fij 求生产完所有糖果所需的最小时间?solution: 最小费用流note: * 从s到每个

2017-02-21 16:51:35 380

原创 poj3680(*最小费用流)

/*translation: 见小白书p246solution: 最小费用流 对于一个区间,在a,b之间连上一条容量1,费用w的边,表示选中这个得到w。区间内部点之间i,i+1之间连上一条 容量无穷,费用0的边。每个a与s相连,容量1,费用0。每个b同理。这样建图之、后跑最小费用流即可。note: **/#include #include #inclu

2017-02-19 22:30:57 686

原创 hdu4411(#最小费用流)

/*translation: n个城市,从0出发,要遍历所有得城市。在访问城市i之前必须已经访问完所有j(j<i)得城市。现在最多有k 个人,求这k个人遍历完所有的城市所走的最小距离。solution: 最小费用流 添加源点、汇点。源点和0之间添加容量为k,费用0的边。0和汇点添加容量k,费用0的边(因为不必k个人全都用) 将每个点拆成i、i+n。i、i

2017-02-19 16:38:37 247

原创 poj1149(*网络流建模方法,paper题)

/*translation: 有M个猪圈,每个猪圈里初始时有若干头猪。一开始所有猪圈都是关闭的。依次来了N个顾客, 每个顾客分别会打开指定的几个猪圈,从中买若干头猪。每个顾客分别都有他能够买的数量 的上限。每个顾客走后,他打开的那些猪圈中的猪,都可以被任意地调换到其它开着的猪圈里, 然后所有猪圈重新关上。问总共最多能卖出多少头猪。(1 <= N <= 100, 1

2017-02-18 23:32:22 309

原创 poj3422(*最小费用流)

/*translation: 一张图的每个坐标上都有一些数字,现要从左上角走到右下角,只能往右或者往下。每一步的得分会在原有 基础上加上坐标上的数字。并且之后把该坐标上的数字清零。求上述过程重复k次之后得分最大值是多少?solution: 最小费用流 很明显只要做一遍容量为k的最小费用流即可。但是难点在于如何满足条件:一个点可以走多次,但是值只能 算一次

2017-02-12 17:39:52 386

原创 poj3686(*最小费用流-转化成普通指派问题)

/*translation: 有n个订单要交给m个工厂完成。给出每个订单在每个工厂的完成时间。求一个最佳方案使得完成所有订单的平均时间最短。solution: 最小费用最大流 如果每个工厂只能完成一个订单的话,那就是指派问题了。跑一遍最小费用流即可。但是题目每个工厂可能完成多个。 所以需要将其拆点使得每个工厂只能完成一个订单,进而转换成指派问题。对一个工厂来说,

2017-02-11 12:36:49 1231

原创 poj2135(*最小费用最大流)

/*translation: 给出一张图,求从1~n再从n~1的最短路径是多少?注意同一条路径不能走两次!solution: 最小费用最大流 这个问题可以转化为求2条从1~n不相交的路径,进而就是直接求从1~n的流量为2的最小费用流。note: * 本质上是求从1~n的流量为2的最小费用流 # 不能直接用两次dijkstra来求。(将第一次走过的路删掉

2017-02-11 10:46:46 2226 2

原创 poj3469(*最小割模型)

/*translation: 要在核A与核B组成的双核cpu上面运行n个模块,给出每个模块在核A、核B上运行的时间。除此之外,接下来还有m组需要交换数据的 模块。每当两组模块在一个核上运行时,不需要任何的额外花费,反之需要一定的额外花费。求运行完n个模块所需的最少时间。solution: 网络流最小割 这道题的本质就是求一个分组方案,在核A上面运行一组,在核B上

2017-02-09 22:17:19 328

原创 poj3281(#网络流最大流)

/*translation: n头牛,f种食物,d种饮料。每头牛有各自喜欢的食物和饮料。而每种饮料和食物只能分配给一头牛。最多能够有多少头 牛可以同时得到喜欢的食物和饮料。solution: 最大流 为了保证一头牛只享有一份食物和饮料。必须把牛拆成两点。一边和对应喜欢的食物连接,一边和对应喜欢的饮料连接。 然后每条边的容量是1.求最大流即可。note:

2017-02-09 20:30:30 254

原创 poj3057(*二分图匹配建模)

/*translation: 给出一张图,其中'.'代表人,'*'代表墙壁,'D'代表门。每道门在同一时刻只能通过一个人。问能否在 一定时间内使得所有人离开地图。若能,输出最后一个人的离开时间。若不能输出impossible。solution: 二分图匹配 将不同时刻的门看成是一侧的点。先预处理出所有人到各个门的最短距离。然后就是将门拆点,即拆成不同 时

2017-02-09 16:07:12 269

原创 poj2226(*行列模型,二分图最小顶点覆盖)

/*translation: 给出一张图'.'代表普通草地,‘*’代表泥地。有宽度固定为1,长度任意的木板。求至少要用多少块木板 才能覆盖所有的泥地而不覆盖任何的草地。solution: 二分图最小顶点覆盖 考虑以木板作为结点。分为两部分,一部分是横木板,一部分是竖木板。将横木板和竖木板都覆盖住的 泥地作为连接两边结点的边。这样求最小顶点覆盖即可实现每个

2017-02-08 16:05:27 541 1

原创 poj2724(*二分图最大独立集)

/*translation: 给出一台机器的操作序列。每次的操作都将产生若干结果。比如011操作产生结果011,*11操作产生结果011 和结果111...以此类推。现在给出若干个操作序列。求最少能用多少个操作完成这些结果。solution: 二分图最大独立集合 实际上就是求二分图最大独立集合,因为*能够同时当作01用,所以操作中应该尽量用*合并两个结果。所以

2017-02-08 10:11:05 274

原创 poj3692(二分图最大独立集)

/*translation: 一群男孩女孩,同性之间都相互认识,但是异性之间只有某些人认识彼此。给出相互认识的异性的各自编号。 然后求组成一个小队,这个小队里的人都相互认识。问这个小队最多能有多少人。solution: 根据 最大独立集合+最小顶点覆盖=点数 以及 二分图当中,最大匹配=最小顶点覆盖即可求出来note:*/#include #include #

2017-02-07 13:06:04 252

原创 poj1466(二分图求最大独立集合)

/*translation: 有n个学生,并且给出男女之间的暧昧关系。现在求一个学习小组,使得里面的任何两个人之间不能有暧昧关系。 求这个学习小组最多能够有多少人?solution: 二分图求最大独立集合 首先明白一个定理:|最大独立集合| + |最小顶点覆盖| == |V|。且在二分图当中有|最大匹配| == |最小顶点覆盖| 所以只要求出最大匹配即可

2017-02-06 12:20:39 469

原创 poj1486(二分图匹配)

/*translation: 有一堆透明的讲义堆叠在一起,每个讲义上的随机一个位置会有讲义的标号。因为讲义是透明的,所以堆叠在 一起的讲义使得这些标号分不清各自对应的讲义。现在要求你求出那些能够确定对应关系的讲义以及对应的标号。solution: 二分图匹配 首先当标号的位置落进某一个讲义的覆盖面积之内,这个标号很可能就是讲义对应的标号。所以连上一条边。

2017-02-06 10:25:40 484

原创 poj2112(二分网络流)

/*translation: 有c头奶牛和k台挤奶机,每台挤奶机器最多能够同时服务m头奶牛。且每个物体之间有一定的距离。 求一种分配方案,使得每头奶牛能够分配到机器的同时,最小化奶牛所走的最长距离。solution: 二分+最大流 看到最小化最大值之类的很容易想到用二分枚举答案。然后就是判定是否可行了。方法是每枚举一次, 就重新建图。建图时将距离超过枚举

2017-02-04 20:34:53 257

原创 poj3155(网络流最大密度子图模型)

/*translation: 公司里面有若干职员,每个职员都有一个或者若干个和自己不和的人,如果让两个不和的人在一起工作,则效率必然下降。 定义一个hard因子。hard:=互相不和的职工对数 / 总人数。现在求从公司里面选出一些人出来,使得hard因子最大。solution: 网络流解决最大密度子图。 paper题,参考论文“最小割模型在信息学竞赛中的应用”一

2017-02-02 12:04:10 520

空空如也

空空如也

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

TA关注的人

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