網路流之最小割

2022-08-02 15:39:08 字數 3058 閱讀 3945

最小割的相關知識請參見:網路流問題

i.     hdu4289    control

題意:給出乙個由n個點,m條邊組成的無向圖。給出兩個點s,t。對於圖中的每個點,去掉這個點都需要一定的花費。求至少多少花費才能使得s和t之間不連通。

分析:題意即求最小割,將每個點拆點,點與對應點的邊權為去掉該點的花費,原圖中所有邊的邊權賦為無窮大,跑一遍最大流即可。(最大流即最小割)

1 #include2 #include3 #include4 #include5

6using

namespace

std;

7const

int maxn = 2010;8

const

int maxm = 1200012;9

const

int inf = 0x3f3f3f3f;10

struct

edge

11edge[maxm];

14int

tol;

15int

head[maxn];

16void

init()

1721

void addedge(int u, int v, int w, int rw=0

) 22

28int

q[maxn];

29int

dep[maxn], cur[maxn], sta[maxn];

30bool bfs(int s, int t, int

n) 3147}

48}49return

false;50

}51int dinic(int s, int t, int

n) 70 u = edge[sta[tail]^1

].to;71}

72else

73if(cur[u] != -1 && edge[cur[u]].cap > edge[cur[u]].flow && dep[u] + 1 ==dep[edge[cur[u]].to])

7478

else

7984}85

}86return

maxflow;87}

88int

n,m,s,d;

8990

intmain()

91102

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

103109 cout<1,d-1+n,2*n)<

110}

111return0;

112 }

view code

j.     uva10480    sabotage

題意:舊**有乙個很龐大的網路系統,可以很方便的指揮他的城市,起義軍為了減少**所以決定破壞他們的網路,使他們的首都(1號城市)和最大的城市(2號城市)不能聯

系,不過破壞不同的網路所花費的代價是不同的,現在起義軍想知道最少花費的代價是多少,輸出需要破壞的線路。

分析:與 i 題一樣,也是求最小割,只要算出最大流即可。不過題目要求輸出最小割的邊,這也是可以用網路流解決的,方法:求完最大流後,在殘留網路中從源點 s 開始 dfs ,將能

到達的點標號( c - f >0 的邊),最後遍歷一遍邊集,將起點被標記、終點未被標記的邊輸出。(注意這是無向圖,邊只用輸出一遍,而在有向圖中,條件應該改為起點標號、終點未標或起點未標、終點標號的邊)。

1 #include2 #include3 #include4 #include5 #include6

7using

namespace

std;

8const

int maxn = 200;9

const

int maxm = 5000;10

const

int inf = 0x3f3f3f3f;11

struct

edge

12edge[maxm];

15int

tol;

16int

head[maxn];

17void

init()

1822

int min(int a,int

b)23

26void addedge(int u, int v, int w, int rw=0

) 27

32int

q[maxn];

33int

dep[maxn], cur[maxn], sta[maxn];

34bool bfs(int s, int t, int

n) 3551}

52}53return

false;54

}55int dinic(int s, int t, int

n) 74 u = edge[sta[tail]].from;75

}76else

77if(cur[u] != -1 && edge[cur[u]].cap > edge[cur[u]].flow && dep[u] + 1 ==dep[edge[cur[u]].to])

7882

else

8388}89

}90return

maxflow;91}

92int

n,m;

93bool

vis[maxn];

9495

void dfs(int

u)96

104}

105106

intmain()

107118 dinic(0,1

,n);

119 memset(vis,false,sizeof

(vis));

120 dfs(0

);121

for(int i=2;i2

)122

129}

130 cout<

131}

132return0;

133 }

view code

網路流之最大流和最小割

最大流 給定有向圖中每條邊的最大流量 容量 求從源點到匯點的最大流量。容量網路 括號左邊代表容量,右邊代表流量。殘留網路 流網路中剩餘可增加的流量 增廣路 滿足容量條件的一條流量不為零的路徑。增廣路定理 設容量網路g v,e 的乙個可行流為f,f為最大流的充要條件是在容量網路中不存在增廣路。ford...

網路流 最小割

標籤 網路流 最小割 原題 洛谷p2057 善意的投票 題目描述 幼兒園裡有n個小朋友打算通過投票來決定睡不睡午覺。對他們來說,這個問題並不是很重要,於是他們決定發揚謙讓精神。雖然每個人都有自己的主見,但是為了照顧一下自己朋友的想法,他們也可以投和自己本來意願相反的票。我們定義一次投票的衝突數為好朋...

網路流 最小割

割是一種對網路流點的劃分方式 對於乙個網路流圖g v,e 劃分為s和t兩部分,其中t v s,源點s s,匯點t t 淨流f s,t 表示穿過割 s,t 的流量之和 f s,t f u,v u s,v t 割的容量c s,t 為所有從s到t的邊容量之和 c s,t c u,v u s,v t f s...