摘要: http://www.cnblogs.com/wangfang20/p/3196858.html题意:求集合Z中至少要包含多少个元素才能是每个区间[ai,bi]中的元素与Z中的元素重合个数为ci。思路:对于dis[b]-dis[a]>=c的形式,我们建一条a到b的边,权值为c,最后求最长路就是要得到的最小值。可举一例,[1,8]假使有7个不同的数,[1,4]假使有2个不同的数,[4,8]假使有3个不同的数,都满足f[8]-f[1]>=7,f[4]-f[1]>=2,f[8]-f[4]>=3.若求最短路,那么肯定得到的结果是5,与f[8]-f[1]>=7相矛盾。故求得 阅读全文
posted @ 2013-07-17 21:20 fangguo 阅读(250) 评论(0) 推荐(1) 编辑
摘要: 思路:将ant与tree之间用距离来做权值,求最小权匹配就可以了。可以想到,如果有两条线段相交,那么将这两个线段交换一个顶点,使其不相交,其权值和一定会更小。就像斜边永远比直角边长一样的道理。#include#include#include#include#include#define Maxn 110#define Eps 0.000001using namespace std;int sx[Maxn],sy[Maxn],match[Maxn],n;double lx[Maxn],ly[Maxn],weight[Maxn][Maxn],slack[Maxn];struct Point{ .. 阅读全文
posted @ 2013-07-17 14:52 fangguo 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 就是最基本的二分图最优匹配,将每个人向每个房子建一条边,权值就是他们manhattan距离。然后对所有权值取反,求一次最大二分图最优匹配,在将结果取反就行了。#include#include#include#include#define Maxn 110using namespace std;int n;//点的数目int lx[Maxn],ly[Maxn]; //顶点标号int weight[Maxn][Maxn];// 边的权值int slack[Maxn];// Y(i)的松弛函数int sx[Maxn],sy[Maxn]; //标记X,Y中的顶点是否在交错路径上int match[Ma 阅读全文
posted @ 2013-07-17 11:33 fangguo 阅读(462) 评论(0) 推荐(0) 编辑