BZOJ 2127 happiness 最小割

來源:互聯網
上載者:User

標籤:bzoj   bzoj2127   最小割   dinic   

題目大意:給定一個座位元影像,相鄰兩人之間是朋友,每個人選擇學文或學理會有相應的喜悅值,一對朋友同時選擇學文/學理也會有相應的喜悅值,求喜悅值之和最大的方案

這個題的模型顯然是最小割- -

看到矩陣上相鄰點之間的關係 很容易想到黑白染色 隨後就能想到將某種顏色的點源匯對調

但是很可惜我沒建出圖來- - 自己YY了一種做法 但是喜聞樂見地發現建圖方法不對- -

還是OTZ HZWER一下吧- - http://hzwer.com/2422.html

我不贅述了- -

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 10100#define S 0#define T (m*n+1)#define INF 0x3f3f3f3f#define P(i,j) ((i)*n-n+(j))using namespace std;struct abcd{int to,f,next;}table[1001001];int head[M],tot=1;int m,n,ans;int a[110][110],b[110][100];void Add(int x,int y,int z){table[++tot].to=y;table[tot].f=z;table[tot].next=head[x];head[x]=tot;}void Link(int x,int y,int z){Add(x,y,z);Add(y,x,z);}namespace Max_Flow{int dpt[M];bool BFS(){static int q[M];int i,r=0,h=0;memset(dpt,-1,sizeof dpt);dpt[S]=1;q[++r]=S;while(r!=h){int x=q[++h];for(i=head[x];i;i=table[i].next)if(table[i].f&&!~dpt[table[i].to]){dpt[table[i].to]=dpt[x]+1;q[++r]=table[i].to;if(table[i].to==T)return true;}}return false;}int Dinic(int x,int flow){int i,left=flow;if(x==T) return flow;for(i=head[x];i&&left;i=table[i].next)if(table[i].f&&dpt[table[i].to]==dpt[x]+1){int temp=Dinic(table[i].to,min(left,table[i].f) );left-=temp;table[i].f-=temp;table[i^1].f+=temp;}if(left) dpt[x]=-1;return flow-left;}}int main(){int i,j,x;cin>>m>>n;for(i=1;i<=m;i++)for(j=1;j<=n;j++){scanf("%d",&a[i][j]);ans+=a[i][j];a[i][j]<<=1;}for(i=1;i<=m;i++)for(j=1;j<=n;j++){scanf("%d",&b[i][j]);ans+=b[i][j];b[i][j]<<=1;}for(i=1;i<m;i++)for(j=1;j<=n;j++){scanf("%d",&x);ans+=x;a[i][j]+=x;a[i+1][j]+=x;Link(P(i,j),P(i+1,j),x);}for(i=1;i<m;i++)for(j=1;j<=n;j++){scanf("%d",&x);ans+=x;b[i][j]+=x;b[i+1][j]+=x;Link(P(i,j),P(i+1,j),x);}for(i=1;i<=m;i++)for(j=1;j<n;j++){scanf("%d",&x);ans+=x;a[i][j]+=x;a[i][j+1]+=x;Link(P(i,j),P(i,j+1),x);}for(i=1;i<=m;i++)for(j=1;j<n;j++){scanf("%d",&x);ans+=x;b[i][j]+=x;b[i][j+1]+=x;Link(P(i,j),P(i,j+1),x);}for(i=1;i<=m;i++)for(j=1;j<=n;j++)Link(S,P(i,j),a[i][j]),Link(P(i,j),T,b[i][j]);using namespace Max_Flow;ans<<=1;while( BFS() )ans-=Dinic(S,INF);cout<<(ans>>1)<<endl;return 0;}


BZOJ 2127 happiness 最小割

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.