【模板】最大权闭合图
ACM模板
目錄
- 概念
- 建圖
- 證明
- 模板題
 
 
概念
閉合圖中所有的點(diǎn)的出邊必須指向內(nèi)部的點(diǎn)
建圖
原圖的邊在網(wǎng)絡(luò)流中的邊容量是INF,如果點(diǎn)權(quán)是正,那么源點(diǎn)向其連邊,容量是點(diǎn)權(quán);否則它向匯點(diǎn)連邊,容量是點(diǎn)權(quán)絕對值
證明
考慮最小割 [S,T][S,T][S,T],所求的滿足條件的閉合子圖為V1V_1V1?
S=V1∪{s}S=V_1\cup \{ s \}S=V1?∪{s} ,T=V2∪{t}T=V_2\cup \{t \}T=V2?∪{t},其中V2=V?V1V_2=V-V_1V2?=V?V1?
 c[S,T]=∑v∈V2+wv+∑v∈V1?(?wv)c[S,T]=\sum_{v\in V_2^+}w_v+\sum_{v\in V_1^-}(-w_v)c[S,T]=v∈V2+?∑?wv?+v∈V1??∑?(?wv?)
而閉合子圖的權(quán)值為
 W(V1)=∑v∈V1+wv+∑v∈V1?wv=∑v∈V1+wv?∑v∈V1?(?wv)W(V_1)=\sum_{v\in V_1^+}w_v+\sum_{v\in V_1^-}w_v=\sum_{v\in V_1^+}w_v-\sum_{v\in V_1^-}(-w_v)W(V1?)=v∈V1+?∑?wv?+v∈V1??∑?wv?=v∈V1+?∑?wv??v∈V1??∑?(?wv?)
于是有
 c[S,T]+W(V1)=∑v∈V1+wv+∑v∈V2+wv=∑v∈V+wvc[S,T]+W(V_1)=\sum_{v\in V_1^+}w_v+\sum_{v\in V_2^+}w_v=\sum_{v\in V^+}w_vc[S,T]+W(V1?)=v∈V1+?∑?wv?+v∈V2+?∑?wv?=v∈V+∑?wv?
即
 W(V1)=∑v∈V+wv?c[S,T]W(V_1)=\sum_{v\in V^+}w_v-c[S,T]W(V1?)=v∈V+∑?wv??c[S,T]
模板題
最大獲利
#include<iostream> #include<algorithm> #include<cstring> using namespace std; const int N=55010,M=6*N,INF=0x3f3f3f3f; int n,m; int h[N],e[M],ne[M],f[M],idx; int S,T,d[N],q[N],cur[N]; void add(int a,int b,int c) {e[idx]=b,ne[idx]=h[a],f[idx]=c,h[a]=idx++;e[idx]=a,ne[idx]=h[b],f[idx]=0,h[b]=idx++; } bool bfs() {memset(d,-1,sizeof d);int tt=0,hh=0;q[S]=0,cur[S]=h[S],d[S]=0;while(hh<=tt){int t=q[hh++];for(int i=h[t];i!=-1;i=ne[i]){int j=e[i];if(d[j]==-1&&f[i]){d[j]=d[t]+1;cur[j]=h[j];if(j==T) return 1;q[++tt]=j;}}}return 0; } int dfs(int u=S,int flow=INF) {if(u==T) return flow;int rmn=flow;for(int i=cur[u];i!=-1&&rmn;i=ne[i]){cur[u]=i;int j=e[i];if(d[j]==d[u]+1&&f[i]){int t=dfs(j,min(f[i],rmn));if(!t) d[j]=-1;f[i]-=t,f[i^1]+=t,rmn-=t;}}return flow-rmn; } int dinic() {int r=0;while(bfs()) r+=dfs();return r; } int main() {cin>>n>>m;memset(h,-1,sizeof h);S=0,T=n+m+1;int s=0;for(int i=1;i<=n;i++){int p;cin>>p; add(i,T,p);}for(int i=1;i<=m;i++){int a,b,c;cin>>a>>b>>c;add(i+n,a,INF),add(i+n,b,INF);add(S,i+n,c);s+=c;}cout<<s-dinic()<<'\n';return 0; } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的【模板】最大权闭合图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 【模板】字符串哈希
- 下一篇: 郁可唯个人资料 郁可唯简介
