傳送門
分析一下題目,考慮構建費用流模型(為什麼會想到費用流啊!)
把每個點拆成兩個 $u,v$
從 $v$ 到 $t$ 連一條流量為 $1$,費用為 $0$ 的邊(這條邊滿流說明此點走完了)
從 $s$ 向每個點 $v$ 連一條流量為 $1$,費用為能力爆發到此星球的時間(從任何一點跳躍其實就相當於從原點重新開始)
從 $s$ 向每個點 $u$ 連一條流量為 $1$,費用為 $0$ 的邊(因為每個點都要經過一次,所以每個點都會到達過)
從每個點的 $u$ 向此點連邊到達的 $v$ 連一條流量為 $1$,費用為走此邊需要的時間
然後最小費用最大流就是答案了...
為什麼是對的呢,因為每個點都要被走過一次,所以一定要有某條到它的邊是滿流的,而上面這種連邊方式就保證了所有可能連向它的邊都被考慮到了
所以是對的...(大概)
#include#include#include
#include
#include
#include
using
namespace
std;
typedef
long
long
ll;inline
intread()
while(ch>='
0'&&ch<='
9')
return x*f;
}const
int n=1e5+7,m=1e7+7,inf=1e9+7
;int fir[n],from[m],to[m],val[m],cst[m],cntt=1
;inline
void add(int a,int b,int c,int
d)int
dis[n],mif[n],pre[n],s,t;
queue
q;bool
inq[n];
bool
spfa()
}return dis[t]}ll ans;
void
upd()
intn,m;
intmain()
while
(spfa()) upd();
printf(
"%lld
",ans);
return0;
}
P2469 SDOI2010 星際競速
pro sol 發現這個模型和最小路徑覆蓋有著密切的聯絡 考慮最小路徑覆蓋是怎麼實現的 一開始用n條長度為1的路徑去覆蓋n個點 使初始答案為n 每個點拆成入點和出點 對於原圖每條邊x y 然後x的出點和y的入點連邊 跑二分圖匹配 求最大流flow 則ans n flow 因為每匹配兩條邊就等價於把x...
P2469 SDOI2010 星際競速(費用流)
p2469 sdoi2010 星際競速 話說如果用上下界網路流就是智障題目了emm 源 點到 i費用0 流量1 源點到i費用0,流量1 源點到i費用 0,流量 1 源 點連 向i 費用為瞬 移的費用 流量1 源點連向i 費用為瞬移的費用,流量1 源點連向i 費用為 瞬移的費 用,流量 1 i 到 匯...
P2469 SDOI2010 星際競速(費用流)
p2469 sdoi2010 星際競速 最小路徑覆蓋問題 每個星球必須恰好去一次,而每次高速航行都是從乙個星球到另乙個星球。那麼高速航行的起點可以保證被去過 高速航行和空間跳躍可以是互相獨立的 將每個點 i 拆成 i 1,i 2 套路地連邊 link s,i 1,1,0 link s,i 2,1,v...