摘要: 题意: 有一个有 N 个节点M 条边的的有向图,每个点对应两种操作: 将该点所有入边删除 ‘+’ ,对应一个花费,将该点所有出边删除 ‘ - ’亦对应一个花费 问如何操作将所有边删除使得花费的总和最小。分析: 建图: 将每个点拆分成两个点, i(左点) 和 i+n(右点) , 建立一个源点 s=0,汇点 u=2*n+1在源点和每个点左面的点连一条边,容量为删除出边的费用 在汇点和每个点右面的点连一条边,容量为删除入边的费用如果有 u到 v 的边,在u 和 v +n 之间连一条边,容量为无穷大 求出最大流即最小割 从源点深搜找出残流不为 0 的点,把这些点标记掉,剩下的为标记的点即为删除的顶点。 阅读全文
posted @ 2012-08-11 19:05 'wind 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 题意: 有一个有 N 个节点的无向图,要求找出两条从1 节点 到 n 节点两条最短且不同的路径,求出其长度和。分析: 由于是两条不同的路径,可以用最小费用最大流,因为是有重边,所以要用邻接表存储边。 建图:建立一个源点 s = 0 在 s 和 1 节点之间加一条容量为 2 费用为 0 的边, 建立一个汇点 u = n+1 在 n 和 u 之间加一条容量为 2 费用为 0 的边, 两两节点如果连通,就在之间加一条 容量为 1,费用为边的长度的双向边。#include<stdio.h>#include<string.h>#define clr(x)memset(x,0,si 阅读全文
posted @ 2012-08-11 12:38 'wind 阅读(238) 评论(0) 推荐(0) 编辑