最小割的相關知識請參見:網路流問題
i. hdu4289 control
題意:給出乙個由n個點,m條邊組成的無向圖。給出兩個點s,t。對於圖中的每個點,去掉這個點都需要一定的花費。求至少多少花費才能使得s和t之間不連通。
分析:題意即求最小割,將每個點拆點,點與對應點的邊權為去掉該點的花費,原圖中所有邊的邊權賦為無窮大,跑一遍最大流即可。(最大流即最小割)
1 #include2 #include3 #include4 #include5view code6using
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 }
j. uva10480 sabotage
題意:舊**有乙個很龐大的網路系統,可以很方便的指揮他的城市,起義軍為了減少**所以決定破壞他們的網路,使他們的首都(1號城市)和最大的城市(2號城市)不能聯
系,不過破壞不同的網路所花費的代價是不同的,現在起義軍想知道最少花費的代價是多少,輸出需要破壞的線路。
分析:與 i 題一樣,也是求最小割,只要算出最大流即可。不過題目要求輸出最小割的邊,這也是可以用網路流解決的,方法:求完最大流後,在殘留網路中從源點 s 開始 dfs ,將能
到達的點標號( c - f >0 的邊),最後遍歷一遍邊集,將起點被標記、終點未被標記的邊輸出。(注意這是無向圖,邊只用輸出一遍,而在有向圖中,條件應該改為起點標號、終點未標或起點未標、終點標號的邊)。
1 #include2 #include3 #include4 #include5 #include6view code7using
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 }
網路流之最大流和最小割
最大流 給定有向圖中每條邊的最大流量 容量 求從源點到匯點的最大流量。容量網路 括號左邊代表容量,右邊代表流量。殘留網路 流網路中剩餘可增加的流量 增廣路 滿足容量條件的一條流量不為零的路徑。增廣路定理 設容量網路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...