摘要: 题意就是 有一个图, 两种操作,一种是删除某点的所有出边,一种是删除某点的所有入边,各个点的不同操作分别有一个花费,现在我们想把这个图的边都删除掉,需要的最小花费是多少那么本题的话,我们看到是要删除所有的边,但只需要在两个端点中的一端进行删除即可,这就可以联想到了最小点权覆盖了。一般对有向图而言,我们经常进行的就是拆点,将每个点拆成两个点,一个点是代表边从这出来,一个代表边从这进去。就分别对应了两种操作了。然后按照最小点权覆盖模型进行建图,求最大流。残余网络中从超级源开始深搜所有可达点。{A}中不可达的点就是应该执行1操作的点。 残余网络中,左侧不可达的点表示被操作1的流选中了{B}中可达的点 阅读全文
posted @ 2013-04-17 23:00 Missa 阅读(209) 评论(0) 推荐(0)
摘要: 题意:一个矩阵,有的方格里有一些敌人,每行或每列都可以安放一架枪,每架枪都有一个花费,而且能消灭他所在的行或列的所有敌人,最后的花费为所有的枪花费的乘积。乘积问题可以先取对数。转化成求和。然后问题很像以前的一个二分匹配问题。把每一行加入到X集合。每一列加入到Y集合。则每一个外星人所在的(row,col)就连条边。求最小点覆盖。但是这个问题有权值。可以转化成KM或者最小割来求解。最小割建图:src 与每一行相连,权值为每行的花费。en 与每一列相连,权值为每列花费。假如外星人出现在(r,c)则连一条r -->c权值为inf的边。 1 // File Name: 3308.cpp 2 // 阅读全文
posted @ 2013-04-17 13:08 Missa 阅读(240) 评论(0) 推荐(0)
摘要: 无向图中给出N个点,M条边,每个点有当前囤积流量和最大容量,任意两个点之间有距离,首先保证所有的流量都可以被节点吸收(即不超过最大容量),然后将流量跑的最大距离限制到最小。拆点:然后二分答案。跟poj 2112差不多。View Code 1 // File Name: 2391.cpp 2 // Author: Missa 3 // Created Time: 2013/4/17 星期三 0:02:23 4 5 #include<iostream> 6 #include<cstdio> 7 #include<cstring> 8 #include<al 阅读全文
posted @ 2013-04-17 11:00 Missa 阅读(871) 评论(1) 推荐(0)