【1】 vijos p1524最小监视代价
最小割
多加一个点n+1,与所有传送点的结点连边。无向图,双向边。然后就是模版....AC~
【2】vijos p1590 笨笨的洪水堵截
最小割
拆点,
for i:=0 to n+n do first[i]:=-1;
for i:=1 to n-1 do begin
read(j);
addedge(i,i+n,j);
end;
addedge(n,n+n,maxlongint);
for i:=1 to m do begin
readln(j,k);
if j>k then swap(j,k);
if j=0 then addedge(0,k,maxlongint)
else addedge(j+n,k,maxlongint);
addedge(k+n,j,maxlongint);
end;
(注意:洪水是从0开始流的!)AC~
【3】 vijos p1555 狼和羊的故事
最小割
平面图中每个格与四周的格连边,cap=1;
s=0,t=n*m+1;
狼领地与s连边,羊领地与t连边。
AC~
【4】vijos p1213 80人环游世界
最小费用最大流
拆点,边cap=v;
s:=0;
t:=n*2+2;
k:=n*2+1;
for i:=s to t do first[i]:=-1;
add(s,k,m,0);
for i:=1 to n do begin
read(a);
add(s,i,a,0);
add(i+n,t,a,0);
add(k,i+n,maxlongint,0);
end;
for i:=1 to n-1 do
for j:=1 to n-i do begin
read(a);
if a<>-1 then
add(i,i+j+n,maxlongint,a);
end;
【5】vijos p1552 餐巾纸引发的血案
最小费用最大流。写的是zkw。
拆点,不知道为什么刚刚看了一下代码发现看不太懂。所以就只是先copy来了。依旧只是copy 初始化过程,其他按模版丫丫。
var i,j,x:longint;
begin
readln(n,a,b,f,fa,fb);
s:=0;
t:=n*2+1;
for i:=s to t do first[i]:=-1;
for i:=1 to n do begin
read(x);
add(s,i,x,f);
add(s,i+n,x,0);
add(i,t,x,0);
end;
for i:=1 to n do begin
for j:=i+a+1 to n do add(i+n,j,maxlongint,fa);
for j:=i+b+1 to n do add(i+n,j,maxlongint,fb);
end;
end;
【6】vijos p1653 疯狂的方格取数
最大费用最大流,写的是spfa。
‘首先,对于起点和ss,我们连一条容量cap为k,花费cost为0的边。再把右下角的那个点和st连一条cap为k,cost为0的边。然后对于每个点我们进行拆点,然后之间连上1条cap为1,cost为-w[i,j](对应点价值)的边,再连上一条 cap为maxlongint,cost为0 的边。然后对于点(i,j)和点(i,j+1)之间连一条cap为maxlongint cost为0 ,在点(i,j)和(i+1,j)之间同理。’copy from EC
然后负边处理。
【7】道路扩容 【8】终极情报网
觉得自己做的题还是那么少,然后就先暂停结束了。
just fight.
47天。110天。Fight,and flight.