BZOJ 2127 二元关系
来源:互联网 发布:web网络编程 编辑:程序博客网 时间:2024/05/22 03:49
题意:
思路:
先把所有的值加起来
最小割割哪儿 就代表那个地方不选
一减 剩下的就是 最大值了
//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=105,M=10005,K=300050,inf=0x3f3f3f3f;int n,m,T,cnt,tot,ans;int A[N][N],B[N][N],C[N][N],D[N][N],E[N][N],F[N][N],id[N][N];int first[M],next[K],v[K],w[K],q[M],vis[M];void Add(int x,int y,int z){w[tot]=z,v[tot]=y,next[tot]=first[x],first[x]=tot++;}void add(int x,int y,int z){Add(x,y,z),Add(y,x,0);}bool tell(){ memset(vis,-1,sizeof(vis)),vis[0]=0; int head=0,tail=0; while(head<=tail){ int t=q[head++]; for(int i=first[t];~i;i=next[i])if(!~vis[v[i]]&&w[i]) vis[v[i]]=vis[t]+1,q[++tail]=v[i]; }return ~vis[T];}int zeng(int x,int y){ if(x==T)return y; int r=0; for(int i=first[x];~i&&y>r;i=next[i])if(vis[v[i]]==vis[x]+1&&w[i]){ int t=zeng(v[i],min(y-r,w[i])); w[i]-=t,w[i^1]+=t,r+=t; }if(!r)vis[x]=-1; return r;}int main(){ memset(first,-1,sizeof(first)); scanf("%d%d",&n,&m),T=n*m+1; for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&A[i][j]),id[i][j]=++cnt; for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&B[i][j]); for(int i=1;i<n;i++)for(int j=1;j<=m;j++)scanf("%d",&C[i][j]); for(int i=1;i<n;i++)for(int j=1;j<=m;j++)scanf("%d",&D[i][j]); for(int i=1;i<=n;i++)for(int j=1;j<m;j++)scanf("%d",&E[i][j]); for(int i=1;i<=n;i++)for(int j=1;j<m;j++)scanf("%d",&F[i][j]); for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) add(0,id[i][j],A[i][j]*2),add(id[i][j],T,B[i][j]*2),ans+=A[i][j]+B[i][j]; for(int i=1;i<n;i++)for(int j=1;j<=m;j++){ add(0,id[i][j],C[i][j]),add(0,id[i+1][j],C[i][j]); add(id[i][j],T,D[i][j]),add(id[i+1][j],T,D[i][j]); add(id[i][j],id[i+1][j],C[i][j]+D[i][j]); add(id[i+1][j],id[i][j],C[i][j]+D[i][j]); ans+=C[i][j]+D[i][j]; } for(int i=1;i<=n;i++)for(int j=1;j<m;j++){ add(0,id[i][j],E[i][j]),add(0,id[i][j+1],E[i][j]); add(id[i][j],T,F[i][j]),add(id[i][j+1],T,F[i][j]); add(id[i][j],id[i][j+1],E[i][j]+F[i][j]); add(id[i][j+1],id[i][j],E[i][j]+F[i][j]); ans+=E[i][j]+F[i][j]; }ans*=2; while(tell())while(m=zeng(0,inf))ans-=m; printf("%d\n",ans/2);}
0 0
- BZOJ 2127 二元关系
- 二元关系
- 二元关系
- 二元关系
- 二元关系知识小结
- 二元关系(续)
- 网络流二元关系
- 二元关系最小割
- POJ 3469 Dinic (二元关系)
- bzoj 2127
- 判断集合二元关系的符合运算
- 判定二元关系的可传递性
- 集合上二元关系性质的判定
- 离散数学-二元关系、闭包的概念
- 二元关系的矩阵和图表示
- 二元关系的表示与基本运算
- C++编写二元关系等价及其商集
- 二元关系的矩阵和图表示
- ZCMU-1853-zbj的游戏
- Coding 日常-20170126-我没有料到今天还在搞 txt 脚本转换
- (转)AI vs 深度学习 vs 机器学习:人工智能的 12 大应用场景
- 微信小程序商城首页
- JDBC连接
- BZOJ 2127 二元关系
- 4033: [HAOI2015]树上染色
- leetcode 26. Remove Duplicates from Sorted Array
- JDK源码分析-AtomicInteger
- codevs天梯高精度乘法
- C语言指针(一)
- Ohm:用 JavaScript 创造你的编程语言
- 如此这般,好吗?
- 3997: [TJOI2015]组合数学