P2469 SDOI2010 星際競速

2022-05-19 11:02:12 字數 1182 閱讀 8902

傳送門

分析一下題目,考慮構建費用流模型(為什麼會想到費用流啊!)

把每個點拆成兩個 $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...