BZOJ 1797 最小割 最小割割邊唯一性判定

2022-05-26 23:51:10 字數 2529 閱讀 7264

問題一:是否存在乙個最小代價路徑切斷方案,其中該道路被切斷? 問題二:是否對任何乙個最小代價路徑切斷方案,都有該道路被切斷? 現在請你回答這兩個問題。

最小割唯一性判定

jcvb:

在殘餘網路上跑tarjan求出所有scc,記id[u]為點u所在scc的編號。顯然有id[s]!=id[t](否則s到t有通路,能繼續增廣)。

①對於任意一條滿流邊(u,v),(u,v)能夠出現在某個最小割集中,當且僅當id[u]!=id[v];

②對於任意一條滿流邊(u,v),(u,v)必定出現在最小割集中,當且僅當id[u]==id[s]且id[v]==id[t]。

<==將每個scc縮成乙個點,得到的新圖就只含有滿流邊了。那麼新圖的任一s-t割都對應原圖的某個最小割,從中任取乙個把id[u]和id[v]割開的割即可證明。

②<==:假設將(u,v)的邊權增大,那麼殘餘網路中會出現s->u->v->t的通路,從而能繼續增廣,於是最大流流量(也就是最小割容量)會增大。這即說明(u,v)是最小割集中必須出現的邊。

# include # include 

# include

# include

# include

# include

# include

# include

# include

# include

# include

using

namespace

std;

# define lowbit(x) ((x)&(-x))

# define pi

3.1415926535

# define eps 1e-9

# define mod

100000007

# define inf

1000000000

# define mem(a,b) memset(a,b,

sizeof

(a))

# define for(i,a,n)

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

# define fo(i,a,n)

for(int i=a; ii)

# define bug puts("h

");# define lch p

<<1

,l,mid

# define rch p

<<1|1,mid+1

,r# define mp make_pair

# define pb push_back

typedef pair

pii;

typedef vector

vi;# pragma comment(linker,

"/stack:1024000000,1024000000")

typedef

long

long

ll;int

scan()

void out(int

a)

if(a>=10) out(a/10

); putchar(a%10+'0'

);}const

int n=5005;//

code begin...

struct edgeedge[120005

];int head[n], cnt=2

, s, t, vis[n];

queue

q;intlow[n], dfn[n], stack[n], belong[n], index, top, scc;

bool instack[n], ans[60005][2

];void add_edge(int u, int v, int

w)int

bfs()}}

return vis[t]!=-1;}

int dfs(int x, int

low)

}if (temp==low) vis[x]=-1

;

return low-temp;

}void tarjan(int

u)

else

if (instack[v]&&low[u]>dfn[v]) low[u]=dfn[v];

}if (low[u]==dfn[u]) while (v!=u);

}}void solve(int

n)int

main ()

u=edge[i].p, v=edge[i^1

].p;

if (belong[u]!=belong[v]) ans[i/2][0]=1

;

if (belong[v]==belong[s]&&belong[u]==belong[t]) ans[i/2][1]=1

; printf(

"%d %d\n

",ans[i/2][0],ans[i/2][1

]); }

return0;

}

view code

最小割問題

求最小割邊數 把第一遍dinic之後把網路中滿流量 殘量為0 的邊的殘量改為1,其餘的邊殘量改為無窮大,不含反向邊。再跑一次dinic即可得出答案 最小割邊一定是滿流的。給定乙個圖,求有多少邊增大流量可以使得從源點到匯點流量增大 其實就是求最小割的割邊是那些。我們先求一次網路流,之後在殘餘圖的基礎上...

最小割總結

最小割通常應用到有限制條件的問題上,初步學習時會較為難理解,希望在看完本文章後能對您有所幫助 兩大建模理解 最大權閉合子圖的思想 雖然和最大權閉合子圖有點像 有正負權和依賴關係 但具體的關係還是模糊的,所以往那方面想就肯定錯了 首先將所有裝置按正 源 負 匯 與超級點連線,容量為權值絕對值大小,在有...

最小割樹 Luogu P4897 最小割樹

給定乙個nn個點mm條邊的無向連通圖,多次詢問兩點之間的最小割 兩點間的最小割是這樣定義的 原圖的每條邊有乙個割斷它的代價,你需要用最小的代價使得這兩個點不連通 輸入格式 第一行兩個數n,mn,m 接下來mm行,每行33個數u,v,wu,v,w,表示有一條連線uu與vv的無向邊,割斷它的代價為ww ...