posts - 43,  comments - 9,  trackbacks - 0
本文纯属YY……

今天多校联合训练三的C题,http://acm.hdu.edu.cn/showproblem.php?pid=3861,题意归结起来是在一个有向图中求最小路径覆盖,也就是用尽量少的链去覆盖整个图,每个顶点必须属于且只能属于一条链。但是题意并未说明原图无环。标程解法是强连通分量缩点,再求有向无环图的最小路径覆盖。反例是:1->2,2->3,4->5,5->6,2->5,5->2。正解是2,123一组,456一组。

因为是要求路径数最小,所以YY了一个上下界最小流的做法。构图是将原来的点A0拆成两个,A和A'。从A到A'连一条边,下界和上界都为1。所有原来A0的出边,都从A'出去,下界0,上界1.所有原来A0的入边,都指向A。新建一个源点S,一个汇点T。从S到每个点A连一条边,下界0,上界1。从每个A'到T连一条边,下界0,上界1。

对这个新图求最小流,即为原题所求。

YY的证明:
A->A',限制了这个点必须经过一次。这条边上的流量有两个来源:其它的点B',或者源点S,前者说明A和B在同一条链中,B是A的前驱,后者说明A是链的起点。同样,这个流量有两个去处:其它的点C',或者汇点T,前者说明A和C在同一条链中,C是A的后继,后者说明A是链的终点。

到达汇的每1单位流量,意味着一条链的终结。所以最小流就能让链数最少。

YY完毕,欢迎开炮……


ps. 理论上说,以上方法肯定是错的。要不然求Hamiltion通路就不是NP了@。@
posted on 2011-07-19 22:42 wolf5x 阅读(910) 评论(0)  编辑 收藏 引用 所属分类: acm_icpcalgorithm

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

"Do not spend all your time on training or studying - this way you will probably become very exhausted and unwilling to compete more. Whatever you do - have fun. Once you find programming is no fun anymore – drop it. Play soccer, find a girlfriend, study something not related to programming, just live a life - programming contests are only programming contests, and nothing more. Don't let them become your life - for your life is much more interesting and colorful." -- Petr

留言簿(3)

随笔分类(59)

随笔档案(43)

cows

搜索

  •  

最新评论

评论排行榜