bzoj 2324 最小費用最大流

2021-07-15 03:53:44 字數 2636 閱讀 6266

time limit: 10 sec  

memory limit: 256 mb

submit: 2137  

solved: 873 [

submit][

status][

discuss]

皮卡丘被火箭隊用**的計謀搶走了!這三個壞傢伙還給小智留下了赤果果的挑釁!為了皮卡丘,也為了正義,小智和他的朋友們義不容辭的踏上了營救皮卡丘的道路。

火箭隊一共有

n個據點,據點之間存在

m條雙向道路。據點分別從1到n

標號。小智一行

k人從真新鎮出發,營救被困在

n號據點的皮卡丘。為了方便起見,我們將真新鎮視為0

號據點,一開始

k個人都在0

號點。

由於火箭隊的重重布防,要想摧毀

k號據點,必須按照順序先摧毀1到k

-1號據點,並且,如果

k-1號據點沒有被摧毀,由於防禦的連鎖性,小智一行任何乙個人進入據點

k,都會被發現,並產生嚴重後果。因此,在

k-1號據點被摧毀之前,任何人是不能夠經過

k號據點的。

為了簡化問題,我們忽略戰鬥環節,小智一行任何乙個人經過

k號據點即認為

k號據點被摧毀。被摧毀的據點依然是可以被經過的。 k

個人是可以分頭行動的,只要有任何乙個人在

k-1號據點被摧毀之後,經過

k號據點,

k號據點就被摧毀了。顯然的,只要

n號據點被摧毀,皮卡丘就得救了。

野外的道路是不安全的,因此小智一行希望在摧毀

n號據點救出皮卡丘的同時,使得

k個人所經過的道路的長度總和最少。

請你幫助小智設計乙個最佳的營救方案吧!

第一行包含三個正整數n,

m,k。表示一共有

n+1個據點,分別從0到

n編號,以及

m條無向邊。一開始小智一行共

k個人均位於0

號點。 

接下來m行,每行三個非負整數,第

i行的整數為ai

,bi,

li。表示存在一條從ai

號據點到bi

號據點的長度為li

的道路。

僅包含乙個整數

s,為營救皮卡丘所需要經過的最小的道路總和。

3 4 2

0 1 1

1 2 1

2 3 100

0 3 1

3【樣例說明】

小智和小霞一起前去營救皮卡丘。在最優方案中,小智先從真新鎮前往1號點,接著前往2號據點。當小智成功摧毀2號據點之後,小霞從真新鎮出發直接前往3號據點,救出皮卡丘。

對於100%的資料滿足n ≤ 150, m ≤ 20 000, 1 ≤ k ≤ 10, li ≤ 10 000, 保證小智一行一定能夠救出皮卡丘。至於為什麼k ≤ 10,你可以認為最終在小智的號召下,小智,小霞,小剛,小建,小遙,小勝,小光,艾莉絲,天桐,還有去日本旅遊的黑貓警長,一同前去大戰火箭隊。

解題思路:建圖和之前的工作的一題很想,就是拆點,然後每個點加乙個與終點的強制邊

這條邊上少的點由拆的另乙個點流,floyed預處理。

#include

#include

#include

#include

using namespace std;

int n,m,k,s,t,len,ans;

int from[501000],to[510000],flow[510000],zhi[501000],next[501000],h[501000];

int dis[310],pre[310],q[1000000];

bool b[310];

int f[200][200];

inline int read()

while (y>='0' && y<='9')

return x*f;

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

bool spfa()

}  u=next[u];

}b[q[head]]=true;

}if (dis[t]<10000000) return true;else return false;

}void mcf()

now=t;

while (now!=s)

}int main()

for (int i=0;i<=n;++i)

for (int j=0;j<=n;++j)

for (int k=0;k<=n;++k) 

if (i!=j && k!=i && k!=j && (k<=j || k<=i))

s=2*n+1; t=2*n+2;

insert(s,0,k,0); insert(0,s,0,0);

for (int i=0;i<=n;++i)

for (int j=i+1;j<=n;++j)

if (f[i][j]<10000000) }

ans=0;

while (spfa())

printf("%d",ans);

}

bzoj1834 最大流 最小費用最大流

就當模板啦 不過這題第二問的構圖還是可以想一下的。在殘量網路中把原來的邊全部加一遍,但是有費用w,容量無限大,一開始的邊還是費用為0 新建乙個源點s,s向1連一條邊,容量為k,費用為0,保證這條邊滿流,就有最小費用了。program bzoj1834 type point record s,t,ca...

最小費用最大流

網 絡流的基本問題為 設乙個有向賦權圖g v,e v 其中有兩個特殊的節點s和s s稱為發點,s 稱為收點。圖中各 邊的方向和權數表示允許的流向和最大可能的流量 容量 問在這個網路圖中從發點流出到收點匯集,最大可通過的實際流量為多少?流向的分布情況為怎樣?設有乙個網路圖g v,e v e中的每條邊 ...

最小費用最大流

const int maxn 250 const int maxm 62272 const int inf 0x4ffffff int n,m struct edge edge maxm int head maxn cnt void init void addedge int u,int v,int...