摘要: 题意:一个国家的地图是一张n个点m条边的有向图。你保卫了国家成为了英雄,现在国王答应给你一些城市。国王居住在首都,编号为1,但他不想随意的到达你的领地,所以你必须破坏一些路,使得从首都到你所拥有的所有城市不连通。而破坏这些路需要花钱。国王给了你f个城市供你选择,每个城市有一个价值。你最后的总收益=你选择的城市的价值之和-破坏路花费的钱。现在让你输出最大的收益,以及完成这样的收益应该破坏哪些路。首先对于表示这个国家地图的有向边(u,v,cost),直接在图中建一条一样的边(u,v,cost)。对于供你选择的城市i,假设它的价值是value,创建一个汇点T,建一条(i,T,value)的边。然后以 阅读全文
posted @ 2013-10-30 22:32 浙西贫农 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一张有向图。如果一个节点在图中被删除后,就能使得从S->T不连通,则称这个点key vertex。问这张图中有多少个点是key vertex。网上有两种说法,一种是网络流,就是拆点建图,求最小割,为了限制增广次数,把S、T拆点后的容量限制到2,这样一来跑最大流得到maxflow,如果maxflow=0,则说明全部的点都可以是key vertex,如果maxflow=2,则说明只有S、T是key vertex,如果maxflow=1的话,就需要到残量网络中去找了。怎么找呢?首先从S出发始寻找在残量网络中可以到达的所有的点,把它们保存在一个队列里,并记上vis标记,然后把这个队列里 阅读全文
posted @ 2013-10-30 19:59 浙西贫农 阅读(406) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一张无向图,每个点上都有一个权值,然后让你删掉权值之和尽量小的点,使得S到H不连通。无向图带权点连通度问题。每个点拆点,容留为点权,对于原来图中的无向边(u,v),拆成两条边(u',v,inf),(v',u,inf),跑S'到T 的maxflow就可以了。 1 #include 2 #include 3 #include 4 #include 5 #define INF 1<<30 6 #define maxn 210 7 #define maxm 30000 8 using namespace std; 9 10 int v[maxm],next 阅读全文
posted @ 2013-10-30 17:12 浙西贫农 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 题意:有一个n*m的矩阵,里面可以放金蛋也可以放银蛋。分别给出在2个矩阵map1,map2表示在矩阵的每个格子里放金蛋的得分和放银蛋的得分。如果相邻的两个格子里都放了金蛋,则总得分要减去G,如果相邻的两个格子里都放了银蛋,则总得分要减去S。现要求你求出放蛋的最大得分。跟HDU 3657比较像,但是这里更加复杂了,因为两种得分,一种金蛋,一种银蛋。所以我的理解是这里是两个二分图合起来的一个二分图,因为金蛋和银蛋存在一个匹配的关系,给矩阵染色后,黑格和白格也存在一个匹配的关系。因此,这样建图:假设行数i+列数j这和为偶数的格子为黑格,奇数的为白格,每个格子拆成两个点k,k',分别表示放金蛋 阅读全文
posted @ 2013-10-30 16:26 浙西贫农 阅读(230) 评论(0) 推荐(0) 编辑