摘要: 刘汝佳新书--训练指南本题中时间是一个天然的序,因此可以构图如下:每个客人是一个点,如果同一个出租车在接完客人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) 编辑