摘要: 刘汝佳新书---训练指南题意:给定一个N*N矩阵,每个格子里都有一个正整数w[i][j]。你的任务是给每行确定一个整数row[i],每列确定一个整数col[i],使得对于任意格子(i,j),w[i][j]《=row[i]+col[j]。所有row[i]和col[i]之和应尽量小。分析:这题是KM算法的一个副产品,KM算法有等式l(x)+l(y)>=w(x,y).// File Name: 11383.cpp// Author: zlbing// Created Time: 2013/2/27 23:37:40#include<iostream>#include<stri 阅读全文
posted @ 2013-02-27 23:58 z.arbitrary 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 假定有一个完全二分图G,每条边有一个权值(可以是负数),如何求出权值和最大的完美匹配?KM算法也称匈牙利算法int Left[MAXN];int w[MAXN][MAXN];int Lx[MAXN],Ly[MAXN];bool S[MAXN],T[MAXN];int N;bool match(int i){ S[i]=true; for(int j=1;j<=N;j++)if(Lx[i]+Ly[j]==w[i][j]&&!T[j]) { T[j]=true; if(Left[j]==0||match(Left[j])) { ... 阅读全文
posted @ 2013-02-27 23:20 z.arbitrary 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 刘汝佳新书--训练指南KM算法,求最佳完美匹配题意:给出N个白点和N个黑点,要求用N条不相交的线段把它们连接起来,其中每条线段恰好连接一个白点和一个黑点,每个点恰好连接到一条线段。分析:因为有结点黑白两色,我们不难想到构造一个二分图,其中每个白点对应一个X结点,每个黑点对应一个Y结点,每个黑点和每个白点相连,权值等于二者的欧几里德距离。建模后最佳完美匹配就是问题的解。为什么呢?假设在最佳完美匹配中有两条线段a1-b1与a2-b2相交,那么dist(a1,b1)+dist(a2,b2)一定大于dist(a1,b2)+dist(a2,b1),因此如果把这两条改成a1-b2和a2-b1后总长度会变少 阅读全文
posted @ 2013-02-27 23:14 z.arbitrary 阅读(1284) 评论(0) 推荐(1) 编辑
摘要: 裸的最小点覆盖数最小点覆盖数=二分图最大匹配数// File Name: 3041.cpp// Author: zlbing// Created Time: 2013/2/27 20:35:34#include<iostream>#include<string>#include<algorithm>#include<cstdlib>#include<cstdio>#include<set>#include<map>#include<vector>#include<cstring>#inc 阅读全文
posted @ 2013-02-27 21:05 z.arbitrary 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 裸的最小路径覆盖最小路径覆盖=顶点数-二分图最大匹配// File Name: 1422.cpp// Author: zlbing// Created Time: 2013/2/27 19:20:35#include<iostream>#include<string>#include<algorithm>#include<cstdlib>#include<cstdio>#include<set>#include<map>#include<vector>#include<cstring># 阅读全文
posted @ 2013-02-27 19:44 z.arbitrary 阅读(175) 评论(0) 推荐(0) 编辑