摘要: 传说中的带权有向图上的中国邮路问题。【题目大意】带权有向图上的中国邮路问题:一名邮递员需要经过每条有向边至少一次,最后回到出发点,一条边多次经过权值要累加,问最小总权值是多少。(20的点,加边(s,i,Di,0);对于Di0的边(i,j),在原图中复制fij份,这样原图便成为欧拉图,求一次欧拉回路即可。以上摘自Edelweiss《网络流建模汇总》启示:这篇论文的前面还讲到一个混合图欧拉回路的问题(就是给出一张既含有有向边又含有无向边的图,问你是否能通过确定图中一些无向边的方向使得图中存在欧拉回路),这种涉及到回路的问题,都要抓住每个点的出度和入度这两个非常重要的条件来构图。 1 #inclu. 阅读全文
posted @ 2013-10-06 19:32 浙西贫农 阅读(455) 评论(0) 推荐(0) 编辑
摘要: 限制增广次数的费用流。【题目大意】一个N*N的网格,每个单元都有一个价值Vi的宝物和一个高度Hi。现在ZhouGuyue要作至多K次旅行,每次旅行如下:他可以借助bin3的直升机飞到任意一个单元,之后他每次只能向相邻的且高度比当前所在格子低的格子移动。当他移动到一个边界的格子上时,他可以跳出这个网格并完成一次旅行。旅行中所到之处的宝物他可以全部拿走,一旦拿走原来的格子里就没有宝物了。问他最多能拿走价值多少的宝物。(1Hj则加边(i’’,j’,∞,0);若格子i在边界上则加边(i’’,t,∞,0)。限制增广次数小于等于K求最小费用流即可。以上摘自Edelweiss《网络流建模汇总》启示:1.增广 阅读全文
posted @ 2013-10-06 16:12 浙西贫农 阅读(336) 评论(0) 推荐(0) 编辑
摘要: 题意:求两条从s->t的路径,使得两条路径不能经过相同的点和边,且两条路径长度之和最小。其实一看到所有点和边只能经过一次,就很容易想到费用流了。拆点,将每个点拆i成(i,i')。对于原图中的每个点,连一条(i,i',1,0)的边,对于原图中的每条边(u,v),连一条(u',v,1,w)的边(w为边的权值),然后添加源S->i',cost=0,cap=2的边(S,i,2,0)的边,添加汇点T,同理,建一条(t,T,2,0)的边,跑一次最小费用最大流就可以得到答案了。其实这题很简单,但是我比赛的时候逗比了。。居然忘记了对源点容量的限制,另一方面我费用流写 阅读全文
posted @ 2013-10-06 14:15 浙西贫农 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 传说中的凸费用流问题,对于一条有c1容量免费,超出容量部分增加的每单位流量费用为c2的边(u,v),在原图中拆成两条边(u,v,c1,0),(u,v,INF,c2)。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #define maxn 1010 7 #define maxm 200010 8 #define INF 0x3f3f3f3f 9 using namespace std; 10 typedef long long LL; 11 int N,M,C,P; 12 struct MCMF{ ... 阅读全文
posted @ 2013-10-06 13:34 浙西贫农 阅读(202) 评论(0) 推荐(0) 编辑