最小割樹 Luogu P4897 最小割樹

2022-07-24 05:33:15 字數 1249 閱讀 3958

給定乙個nn個點mm條邊的無向連通圖,多次詢問兩點之間的最小割

兩點間的最小割是這樣定義的:原圖的每條邊有乙個割斷它的代價,你需要用最小的代價使得這兩個點不連通

輸入格式:

第一行兩個數n,mn,m

接下來mm行,每行33個數u,v,wu,v,w,表示有一條連線uu與vv的無向邊,割斷它的代價為ww

接下來這一行有乙個整數qq,表示詢問次數

接下來qq行,每行兩個數u,vu,v,你需要求出uu與vv之間的最小割

注意:因為資料有誤,給定圖的真實點數應該是n+1n+1個,編號為00到nn

輸出格式:

輸出共qq行,每行乙個整數對應詢問的答案

輸入樣例#1:

4 5

1 2 2

2 3 2

4 2 3

4 3 1

1 3 1

31 4

2 42 3

輸出樣例#1:

3

44

n\leq 500,\quad m\leq 1500,\quad q\leq 10^5,\quad 0\leq w\leq 10^4n≤500,m≤1500,q≤105,0≤w≤104

1 #include 2 #include 3 #include 4 #include 5 #include 6

#define inf 0x3f3f3f3f

7#define n 510

8using

namespace

std;

9int s,t,cnt=1

,n,m,q,dis[n],head[n],a[n],tmp[n],ans[n][n],mark[n];

10struct edgee[n*200

];11 queue q;

12void insert(int u,int v,int

c)13

17bool

bfs()

1831}32

return0;

33}34int dfs(int x,int

maxf)

3545

if (!ret) dis[x]=0;46

return

ret;47}

48void dfs(int

x)49

53void solve(int l,int

r)54

67int

main()

68

學習 最小割樹

及時學習了一波最小割樹。我們有乙個定理 對於n個點的一張圖,本質不同的最小割最多只有n 1種。那麼我們一定可以將原圖構成一棵樹,使得原圖中兩個點 x,y 的最小割等於這棵樹上兩點 x,y 的最小割。構造方法 我們選取集合中的兩個點 x,y 然後跑乙個最小割後將集合劃分為x集合 x可以在殘量網路上到達...

Luogu P3355騎士共存問題(最小割)

題目鏈結 像題面那樣把棋盤染成紅黃點。發現騎士邁一步能到達的點的顏色一定是跟他所在的格仔的顏色不同的。於是 woc哪來的於是?這個性質有這麼明顯嗎?從源點向所有紅點連邊,從所有黃點向匯點連邊,紅點向從它一步能邁到的黃點連邊,然後求出最小割 其實就是最大流啦 用可以站騎士的總點數減去。網路流構圖好喵啊...

學習筆記 最小割樹

用於求任意兩個點的最小割 最大流 最小割樹建造方法 類似於分治 在當前點集中選擇任意兩個點作為源點 匯點,跑最小割g 兩個點之間連樹邊,邊權為g 把當前點集中和源點聯通的能到的放進乙個集合裡,與t聯通的放進另乙個集合裡。然後分治下去 注意,每次跑最小割g是在全域性跑。n次最小割 建出樹來之後,任意兩...