- 博客(25)
- 收藏
- 关注
原创 hdu 3861 The King’s Problem 强连通+二分匹配
#include#include#include#include#include#define maxn 5005#define maxm 100005#define clr(a,b) memset(a,b,sizeof(a))using namespace std;stacks;vectorvc[maxn];int ca,n,m,bcnt,e,first[maxn],ev
2012-07-23 14:59:08 1225
原创 hdu 3279 I'm Telling the Truth 二分匹配
思路:建图很容易,排名和人的标号连边,倒着匹配就可以输出最大字典序 代码:#include#include#include#define clr(a,b) memset(a,b,sizeof(a))#define maxn 65#define maxm 100005using namespace std;int next[maxn*maxm],ev[m
2012-07-23 14:57:09 968
原创 hdu 3360 National Treasures 二分匹配
题意:给出一个R*C的表,每个格子上标有值,-1表示已经有的保安,其他表示古董的价值,要看守一个古董就必须在1~12各个点上都有保安,求最少要雇的保安。 思路:建图,从图中可以发现古董和保安的位置相差一个奇数,所以我们可以将表格着色,白的为x部,黑的为Y部,古董和保安连一条边,求最小点覆盖。 代码: #include#include#in
2012-07-23 14:52:37 755
原创 hdu 2444 The Accomodation of Students 二分匹配
思路:模拟分组,如果一个点的分组与上一次的分组矛盾则输出No,否则对两组进行匹配。 代码:#include#include#include#include#define Maxn 205#define clr(a,b) memset(a,b,sizeof(a))using namespace std;int c[Maxn],s[Maxn],kx[Max
2012-07-23 14:44:01 357
原创 hdu 2236 无题II
思路:二分枚举差值,再枚举下限。#include#include#include#include#define maxn 110#define INF 0x3f3f3f3f#define max(a,b) a>b?a:b#define min(a,b) a<b?a:b#define clr(a,b) memset(a,b,sizeof(a))using namespace
2012-07-23 14:40:03 389
原创 poj 3686 The Windy's 二分匹配 KM算法求最小权匹配
题意:有M个工作间,N个玩具订单,求最小的平均完成时间 思路:对M个工作间分成N个点,j的第p个点表示倒数第p次加工,若要在一个工作间上完成k个订单则需要假设我们按顺序在J机器上工件I1,I2,I3..IK个工件,则总共需要花费I1*K+I2*(K- 1)+I3*(K-3)++IK, 所以我们对于X中每个点I,Y中每个点(J,P),连接一条A[I,J]*P权值的边.
2012-07-23 14:37:39 920
原创 poj 2400 Supervisor, Supervisee 二分匹配 最小权完美匹配 KM算法
题意:有n个应聘者应聘n个部门,每个部门的经理对每个人的喜欢程度不一样(记1~N,最喜欢的为1),每个应聘者对每个经理的喜欢程度也不一样(同上)。给出每个经 理对应聘者的喜欢程度和应聘者对经理的喜欢程度,求平均最小偏差(貌似题目给出的两个矩阵是反的,有点不清晰啊) 思路:此题求最小权的完美匹配,cv[i][j]记录i候选人对j经理的喜爱程度,sv[i]
2012-07-23 14:18:41 706
原创 poj 2594 Treasure Exploration 可重复覆盖的二分图最小覆盖路径
题意:给出一个图,有N个点有宝藏,M条单向边,求用最少的机器人去挖宝藏。 思路:注意到You should notice that the roads of two different robots may contain some same point。说明有些点可以重复经过,所以只要考虑路径的两个端点即可,用floyd求传递闭包。 代码:#inc
2012-07-23 13:58:58 354
原创 poj 1904 King's Quest 强连通
题意:国王有n个儿子,王国里有n个漂亮MM,每个王子喜欢mi个MM,国王想给他的儿子找媳妇,给出原先给王子匹配的MM标号,求出每个儿子所有可能结婚的对象。 思路:王子对每个喜欢的MM连一条边,原先给王子匹配的MM连一条反向边,求强连通分量。再连通分量中的MM如果没有嫁给在同一个连通分量中的王子的话,一定有另外 至少一个MM和一个王子在同一个连通分量
2012-07-23 13:41:09 2095
原创 poj 1486 Sorting Slides 二分匹配
题意:给出几张纸的覆盖范围,和几个标号的坐标,求最多的可以确定这些纸的标号 思路:每张纸作为X部,标号作为Y部,如果标号在纸中,则连一条边,求最大匹配。检验是否有多重的匹配时,可以枚举删除匹配边,再对其进行匹配,若找到匹配边, 则该纸的标号不确定。 以下是代码: #
2012-07-23 13:25:22 402
原创 poj 2226 Muddy Fields 二分匹配匈牙利
题意:用最少的木板覆盖所有带*号的点。 思路:这题主要在于建图,先遍历每一行,进行标号1~i,相连的带*号的点标号相同,行的标号作为二分图的X部分。再以列进行同样操作,标号1~j,作为二分图的Y部 分,对于每个点,如果两次标号不同,则连一条边。求最小点覆盖 代
2012-07-23 13:15:57 330
原创 poj 2060 Taxi Cab Scheme 二分匹配匈牙利
题意:有n个任务,从a点到b点,如果一辆车在a点的下个任务开始时间前一分钟可以返回a点的话则可以继续下个任务,求完成所有任务所需要的最少车的数目: 思路:最少路径覆盖,如果两个任务可以用一辆车完成的话,则连一条边,最后由m-最大匹配数得到结果。 代码: #include#include#include#include#include#
2012-07-22 22:05:53 336
转载 强连通分量 tarjan算法
本文仅供本菜鸟复习用。。大家看看就好,笑笑而过。 参考资料:http://wenku.baidu.com/view/ceb92fe2524de518964b7d66.html #include#include#include#include#include#define maxn 5005#define maxm 100005#d
2012-07-22 21:45:39 919
原创 二分图最大匹配Hopcroft_Karp算法 及hdu2389
学二分好几天了。。以为匈牙利和KM算法够用的。。没想到我还是太天真了。晚上在切hdu 2389的时候匈牙利一直TLE。好吧!只能去网上看大牛的题解。所以就认识了Hopcroft_Karp算法(简称HK),一个二分匹配中很高效的算法。我们知道匈牙利算法复杂度为O(en),而HK为v(en^0.5),还是很快的。 大概思路:用BFS对X部分的所有未被覆盖的点进行寻找增广路,列出所
2012-07-21 21:05:56 497
原创 完全二分图的最大权完美匹配 KM算法
最近在切二分匹配的题目,以前只学了点概念,趁现在有时间仔细得学下,下午和晚上花了几个小时学了KM算法,开始比较难理解,看了lrj的ppt后,有点明白了,现在整理下,以便记住。 概念: lx(u),ly(v)分别表示左右两边的顶点顶标,即每一个点的值,这里有lx(u)+ly(v)>=w(u,v),选值时可令ly(v)=0,lx(u)为邻边权值最大
2012-07-17 21:56:06 1265
转载 二分图匹配总结
对于任意图:|最小边覆盖|+|最大匹配|=|V|二分图的最大匹配=最小点覆盖数对于二分图:以下数值等价.最大匹配最小点覆盖|V|-最大独立集(二分图or有向无环图)|V|-最小边覆盖数|V|-最小路径覆盖数(有向无环图)|V|-最小路径覆盖数/2(无向图)(上面括号里有有向无环图的,均是将一个点拆成两个点连边匹
2012-07-14 19:03:14 704
原创 poj 1379 Run away 模拟退火
第一道模拟退火题是看了别人的代码才会的,现在对这种题目只能是乱搞了。 题意:求距离所有点中最近的点的距离最大。 代码: #include#include#include#include#define sqr(x) ((x)*(x))#define eps 1e-3#define Maxn 1000+10#define INF 0x3f3f3f3
2012-07-14 17:56:19 297
原创 uva 10173 凸包最小覆盖矩形面积
题意:求凸包的最小覆盖矩形面积 #include#include#include#include#include#define Maxn 1001+10#define sqr(x) ((x)*(x))#define min(a,b) a<b?a:busing namespace std;const double eps=1e-8;const doub
2012-07-14 17:48:17 584
原创 poj 2079 Triangle 凸包最小覆盖三角形
题意:求覆盖所有点的最小三角形面积#include#include#include#include#include#include#include#include#define sqr(x) ((x)*(x))using namespace std;const double eps=1e-8;const double pi=acos(-1.0);int dc
2012-07-14 17:41:52 580
原创 poj 3608 Bridge Across Islands 凸包最短距离
题意:求两个凸包的最短距离 思路:将凸包逆时针化,寻找一个凸包的y最小的一个点,另一个凸包y最大的点,分别按逆时针旋转卡壳,更新最短距离。 代码: #include#include#include#include#include#define sqr(x) ((x)*(x))#define maxn 10
2012-07-14 16:52:48 404
原创 poj 2187 Beauty Contest 凸包最长直径
题意:求所有点中最远距离,即凸包的最长直径 思路:求凸包,旋转卡壳求最长直径,枚举各个点,找对踵点,更新距离 代码: #include#include#include#include#include#include#include#include#define sqr(x
2012-07-14 16:47:15 314
原创 poj 2600 Geometrical dreams 模拟退火
哎!还是没有掌握模拟退火的精髓啊!继续努力吧! 题意:给出多边形外点的坐标Mi和该点与多边形相邻两点的夹角AiMiAi+1,求多边形的各个顶点坐标。 思路:初始化一个点作为多边形的第一个点(顺时针方向),这里取原点,向八个方向进行移动得到 t,由第一个点根据坐标旋转求出其他各个点,取t与rp[0]到rp[n]最近的点作为rp[0](最
2012-07-14 15:45:42 575
原创 poj 2420 A Star not a Tree? 模拟退火
题目大意:在多边形中找一个点,让这个点距离所有点的距离和最短。 模拟退火,选一个随机点,朝上,下,左,右四个点移动 代码:#include#include#include#include#include#define maxn 100+10#define sqr(x) ((x)*(x))#d
2012-07-14 13:16:02 480
原创 poj 2069 super star 模拟退火
一开始随机选一个点,然后向四周随机移动,结果不是wa就是TLE,后来看了ch_g的博客,向最远的点靠近移动 题意:求覆盖空间所有点的球最小半径 代码如下: #include#include#include#include#include#incl
2012-07-14 13:13:06 338
原创 poj 3301 Texas Trip 三分法求旋转角极值
通过这题才知道有三分法,我们知道二分法对于单调函数而言是个非常好的方法,同样,对于凸性函数则用三分法的效率还是很高的。 三分法:http://www.cppblog.com/abilitytao/archive/2010/11/07/132863.html 坐标旋转:x1=cos(angle)*x-sin(angle)*y;
2012-07-14 13:06:29 935 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人