P2469 SDOI2010 星際競速(費用流)

2021-10-24 02:07:50 字數 2604 閱讀 5233

p2469 [sdoi2010]星際競速

(話說如果用上下界網路流就是智障題目了emm)

源 點到

i費用0

,流量1

源點到i費用0,流量1

源點到i費用

0,流量

1 源 點連

向i′,

費用為瞬

移的費用

,流量1

源點連向i',費用為瞬移的費用,流量1

源點連向i′

,費用為

瞬移的費

用,流量

1 i ′到

匯點費用

0,流量

1i'到匯點費用0,流量1

i′到匯點費

用0,流

量1 若有u

到v的邊

,則u′

連向v,

費用為花

費,流量

1若有u到v的邊,則u'連向v,費用為花費,流量1

若有u到v的

邊,則u

′連向v

,費用為

花費,流

量1 比如現

在有a−

>b和

b−>c的

邊,圖大

概這樣子

比如現在有a->b和b->c的邊,圖大概這樣子

比如現在有a

−>b和

b−>c的

邊,圖大

概這樣子

考慮這樣做的正確性把點i

拆點,其

實i相當

於入點,

i′相當

於出點把點i拆點,其實i相當於入點,i'相當於出點

把點i拆點,

其實i相

當於入點

,i′相

當於出點我們

最後走的

路徑一定

是一條一

條的鏈,

鏈首是瞬

移過去的

我們最後走的路徑一定是一條一條的鏈,鏈首是瞬移過去的

我們最後走的

路徑一定

是一條一

條的鏈,

鏈首是瞬

移過去的那假

如說明鏈

首出點沒

被任意一

條路徑經

過那假如說明鏈首出點沒被任意一條路徑經過

那假如說明鏈

首出點沒

被任意一

條路徑經

過 因 為是

最大流,

所以匯點

會走向鏈

首的出點

,相當於

花費了鏈

首的瞬移

代價因為是最大流,所以匯點會走向鏈首的出點,相當於花費了鏈首的瞬移代價

因為是最大流

,所以匯

點會走向

鏈首的出

點,相當

於花費了

鏈首的瞬

移代價

如 果某

個點不屬

於鏈首也

不屬於鏈

尾,說明

入點和出

點有連邊

如果某個點不屬於鏈首也不屬於鏈尾,說明入點和出點有連邊

如果某個點不

屬於鏈首

也不屬於

鏈尾,說

明入點和

出點有連

邊 如 圖所

示,相當

於兩次匹

配,只花

費匹配的

高速航行

的費用如圖所示,相當於兩次匹配,只花費匹配的高速航行的費用

如圖所示,相

當於兩次

匹配,只

花費匹配

的高速航

行的費用

所以正確

(**很簡單)

#include using namespace std;

const int n=2e3+10;

const int m=2e6+10;

const int inf=1e8;

int d()

int n,m,p,s,t,a[n],fans,cans;

struct edgee[m];

int g[n],top=1;

void add(int x,int y,int z,int w);

g[x]=top;

}void add(int x,int y,int z,int w)

int dep[n],cur[n];

bool vis[n];

queueq;

bool spfa()

}} }

return dep[t]!=inf;

}int dfs(int x,int f)

} }return flow;

}int main()

for(int i=1;i<=m;i++)

while(spfa())

printf("%d\n",cans);

return 0;

}

P2469 SDOI2010 星際競速

pro sol 發現這個模型和最小路徑覆蓋有著密切的聯絡 考慮最小路徑覆蓋是怎麼實現的 一開始用n條長度為1的路徑去覆蓋n個點 使初始答案為n 每個點拆成入點和出點 對於原圖每條邊x y 然後x的出點和y的入點連邊 跑二分圖匹配 求最大流flow 則ans n flow 因為每匹配兩條邊就等價於把x...

P2469 SDOI2010 星際競速

傳送門 分析一下題目,考慮構建費用流模型 為什麼會想到費用流啊!把每個點拆成兩個 u,v 從 v 到 t 連一條流量為 1 費用為 0 的邊 這條邊滿流說明此點走完了 從 s 向每個點 v 連一條流量為 1 費用為能力爆發到此星球的時間 從任何一點跳躍其實就相當於從原點重新開始 從 s 向每個點 u...

P2469 SDOI2010 星際競速(費用流)

p2469 sdoi2010 星際競速 最小路徑覆蓋問題 每個星球必須恰好去一次,而每次高速航行都是從乙個星球到另乙個星球。那麼高速航行的起點可以保證被去過 高速航行和空間跳躍可以是互相獨立的 將每個點 i 拆成 i 1,i 2 套路地連邊 link s,i 1,1,0 link s,i 2,1,v...