2019HDU多校Path 最短路最小割

2022-05-02 00:42:17 字數 1558 閱讀 1354

給出乙個 $n$ 個頂點 $m$ 條邊的圖,要求阻塞一些邊,使得從 $1$ 到 $n$ 的最短路變長,求阻塞的邊長度和的最小值,不必保證阻塞後可達。

很顯然,要阻塞的邊肯定在最短路圖上,先跑一遍單源最短路,求出最短路圖。

要使最短路變長,肯定要同時切斷原有的所有最短路,又要是長度(相當於流量)和最小,很容易想到就是求最小割。

簡而言之,就是在最短路圖上求最小割。

兩個模板拼起來就好了(難得寫抄這麼長的能一遍ac)

#includeusing

namespace

std;

typedef

long

long

ll;const ll inf = 1ll << 60

;const

int inf2 = 0x3f3f3f3f

;const

int maxv = 10000+10; //

最大頂點數

const

int maxn =maxv;

const

int maxe = 10000+10; //

最大邊數

ll dis[maxv];

intcnt[maxv];

bool inq[maxv]; //

記錄是否在隊中

int head[maxv], id; //

head2[maxv], cnt2;

intn, m;

struct

edge

edge[maxe];

inline

void

init()

inline

void addedge(int u, int v, int w, int

id)bool spfa(int

s) }}}

}return

true;}

struct

edge2

};struct

edmondskarp

void addedge(int

from, int to, int

cap)

ll maxflow(

int s, int

t)

}if(a[t]) break

; }

if(!a[t]) break

;

for(int u = t; u != s;u=edges[p[u]].from

)

flow +=a[t];

}return

flow;

}}ek;

intmain()

spfa(1);

ek.init(n);

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

}printf(

"%lld\n

", ek.maxflow(1

, n));

}return0;

}

2019HDU多校 Path 最短路轉最小割

hdu6852 之前見過類似的題,所以寫起來很輕鬆 因為要讓最短路邊長,所以可以先跑最短路 滿足d is u dis v d i w dis u dis v d i w dis u di s v d i w的邊就是最短路邊 這些最短路邊形成一張網路 在上面跑最小割,代表的就是割斷每一條最短路 inc...

2019HDU多校第7場 構造

假設現在你在準備考試,明天的考試有 n 道題目,對於分值為 i 的題目至少複習 i 1 小時才能做對,已知總分為 m 求確保完成 k 道題的最少時間。手動嘗試一下,發現答案都是 aabbbb 這樣的形式。例如,5 18 3 rightarrow 6 6 7 7 7,5 19 3 rightarrow...

2019HDU多校 6223 (最小質因子指數冪)

傳送門 題解 考慮先篩出1e4 1e41e 4以內的素數,對於每個輸入的 n nn 先除掉 1e4 1e41e 4 以內的素因子 如果存在的話 並且更新答案。如果除完後n nn 還大於1,說明存在大於1e4 1e41e 4的素因子,而且這些素因子的最多隻會有4 44次方,因為更大的話就會超過 1 e...