標籤: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 最小割