2333 MatScan

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

http://acm.zju.edu.cn/show_problem.php?pid=2333

这题很汗,那天去图书馆看论文,看到一道类似的题目,原题是这样的

一块如下N*M的电路板,有些坏点,一种修理的方法是用预先备用的

的a条N*1和b条1*M去覆盖这些坏点

求出使用条数最少的方法

。。。。。。。。

。。。。。。。。

。。。。。。。。

。。。。。。。。

。。。。。。。。

这题是NP难的

然后就想把他改为没有a,b限制就好做了,当时没想到可以要求求出具体解,觉得直接套模块会被bs,就算了

后来neal竟然出出来了,相当汗。多了求解的过程就成了一道很好的题目。

转化为行和列的二分图匹配后就是最小顶点覆盖的问题了

最小顶点覆盖数等于最大匹配数

要证明这个结论还是有点麻烦的

1、首先对于一个具体的匹配A-a,不可能同时存在未匹配的点B,b 其中(A,b)

(B,a)都是图的边,因为这样的话可以通过匹配(A,b)和(B,a)得到更大的匹配

2、对于一个具体的匹配

A-a

B-b

如果(A,b)还有边,那么对于B,a就可能同时存在未匹配的点c,C,其中(B,c)

(C,a)都是图的边,因为这样之后可以通过匹配(B,c)、(C,a)、(A,b)得到更大的匹配

将选择点成为着色

于是可以这样求解,

1、对于一端匹配而另一端未匹配的边,将匹配的那个点着色

根据结论1,不可能出现匹配的边两点都着色的情况

2、对于两端点都已匹配的但是这条边并不是匹配边的情况,根据结论2这两个端点中至少有一个端点与他匹配的那个点在步骤1之后还未着色,于是将那个点着色即可

3、步骤1,2后对于匹配的边,如果两个点都还未着色,随便选一个就好了

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航