上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 22 下一页
摘要: 就是一个裸的最大流来当模版用也不错// File Name: 1273.cpp// Author: zlbing// Created Time: 2013/3/2 22:01:59#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define CL(x,v); memset(x,v,sizeof(x));#define INF 0x3f3f3f3f#define LL long long#define MAXN 阅读全文
posted @ 2013-03-02 23:03 z.arbitrary 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 刘汝佳新书--训练指南本题中时间是一个天然的序,因此可以构图如下:每个客人是一个点,如果同一个出租车在接完客人u以后来得及接客人v,连边u->v。不难发现这个图是一个DAG,并且它的最小路径覆盖就是本题的答案。最小路径覆盖=结点数-最大匹配数证明:DAG最小路径覆盖的解法如下:把所有结点i拆成X结点i和Y结点i',如果图G中存在有向边i->j,则在二分图中引入边i->j'。设二分图的最大匹配数为m,则结果就是n-m。为什么呢?因为匹配和路径覆盖是一一对应的。对于路径覆盖中的每条简单路径,除了最后一个“结尾结点”之外都有唯一的后继和它对应(即匹配结点),因此匹配数就是非尾结点的个数 阅读全文
posted @ 2013-03-01 21:18 z.arbitrary 阅读(305) 评论(0) 推荐(0) 编辑
摘要: //初始时需要将w初始化为0int Left[MAXN];//Left[i]为左边与右边第i个点匹配的编号int w[MAXN][MAXN];bool S[MAXN],T[MAXN];int N;bool match(int i){ S[i]=true; for(int j=1;j<=N;j++)if(w[i][j]&&!T[j]) { T[j]=true; if(Left[j]==0||match(Left[j])) { Left[j]=i; return true; } ... 阅读全文
posted @ 2013-03-01 16:34 z.arbitrary 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 很明显的二分图,只是这题需要输出最小覆盖的点我们可以在求出最大匹配之后,以未覆盖的x点进行标记,沿着未覆盖->覆盖->未覆盖->覆盖...的路径标记,最后S中未标记的和T中标记的点构成最小点覆盖集。// File Name: 11419.cpp// Author: zlbing// Created Time: 2013/3/1 14:20:03#include<iostream>#include<string>#include<algorithm>#include<cstdlib>#include<cstdio>#i 阅读全文
posted @ 2013-03-01 16:27 z.arbitrary 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 引用刘汝佳新书--训练指南稳定婚姻问题题意:在一个盛大的校园舞会上有n位男生和n位女生,每人都对每个异性有一个排序,代表对他们的喜欢程度。你的任务是将男生和女生一一配对,使得男生u和女生v不存在以下情况:(1)男生u和女生v不是舞伴;(2)他们喜欢对方的程度都大于喜欢各自当前的舞伴的程度。如果出现了(2)中的情况,他们可能会擅自抛下自己的舞伴,另外组成一对。你的任务是对于每个女生,在所哟可能和她跳舞的男生中,找出她最喜欢的那个。分析:本题就是著名的稳定婚姻问题,只是把结婚和配偶换成了跳舞和舞伴。下面用原题中的术语来介绍这个问题的Gale-Shapley算法。这个算法也称求婚-拒绝算法,因为算法 阅读全文
posted @ 2013-03-01 14:08 z.arbitrary 阅读(393) 评论(0) 推荐(0) 编辑
摘要: 弱的一笔啊!!都知道这题是欧拉路径都还Wa了那么久。。。伤心!原来欧拉路径的压栈一定要在dfs()之后压。。。这题就是将牌骨的数字看做点,把牌看做连接两点的边。。。这样就成了欧拉路了// File Name: 1002.cpp// Author: zlbing// Created Time: 2013/2/24 11:39:49#include<iostream>#include<string>#include<algorithm>#include<cstdlib>#include<cstdio>#include<set> 阅读全文
posted @ 2013-02-28 14:44 z.arbitrary 阅读(203) 评论(1) 推荐(0) 编辑
摘要: 刘汝佳新书---训练指南题意:给定一个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 阅读(1283) 评论(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) 编辑
上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 22 下一页