Description

给出一个N*N的矩阵B和一个1*N的矩阵C。求出一个1*N的01矩阵A.使得

D=(A*B-C)*A^T最大。其中A^T为A的转置。输出D

Input

第一行输入一个整数N,接下来N行输入B矩阵,第i行第J个数字代表Bij.
接下来一行输入N个整数,代表矩阵C。矩阵B和矩阵C中每个数字都是不超过1000的非负整数。

Output

输出最大的D

Sample Input

3
1 2 1
3 1 0
1 2 3
2 3 7

Sample Output

2

HINT

1<=N<=500

Source

经过推导得出:

是一个最大权闭合子图的模型

选择一个Ai==1,会损失Ci;

对于一个点对(i,j),当Ai和Aj同时==1时,可以获得Bij的收益;

由于收益是同时依赖于两个点的,所以可以对每一个点对新建一个附加点tt,从s向其连Bij的边,然后tt向i,j连Inf;

其余的连边就是最大权闭合子图的套路了

最后正权和-最小割即为答案

(玄学剪枝真有用)

  1. // MADE BY QT666
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cmath>
  5. #include<iostream>
  6. #include<cstring>
  7. #define RG register
  8. using namespace std;
  9. typedef long long ll;
  10. const int N=2000000;
  11. const int Inf=19260817;
  12. int gi()
  13. {
  14. int x=0;
  15. char ch=getchar();
  16. while(ch<'0'||ch>'9') ch=getchar();
  17. while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
  18. return x;
  19. }
  20. int head[N],nxt[N],to[N],s[N],cnt=1,S,T,n,sum,q[N],level[N],vis[N],F,c[N];
  21. int b[600][600],C[1000],tot;
  22. inline void Addedge(int x,int y,int z) {
  23. to[++cnt]=y,s[cnt]=z,nxt[cnt]=head[x],head[x]=cnt;
  24. }
  25. inline void lnk(int x,int y,int z){
  26. Addedge(x,y,z);Addedge(y,x,0);
  27. }
  28. inline bool bfs(){
  29. for(RG int i=S;i<=T;i++) level[i]=0,vis[i]=0;
  30. int t=0,sum=1;
  31. q[0]=S,level[S]=1,vis[S]=1;
  32. while(t<sum){
  33. int now=q[t++];
  34. if(now==T) return 1;
  35. for(RG int i=head[now];i;i=nxt[i]){
  36. int y=to[i];
  37. if(level[y]==0&&s[i]){
  38. level[y]=level[now]+1;
  39. q[sum++]=y;
  40. }
  41. }
  42. }
  43. return 0;
  44. }
  45. inline int dfs(int now,int maxf){
  46. if(now==T) return maxf;
  47. int ret=0;
  48. for(RG int i=head[now];i;i=nxt[i]) {
  49. int y=to[i],f=s[i];
  50. if(level[y]==level[now]+1&&f) {
  51. int minn=min(maxf-ret,f);
  52. f=dfs(y,minn);
  53. s[i]-=f;
  54. s[i^1]+=f;ret+=f;
  55. if(ret==maxf) break;
  56. }
  57. }
  58. if(!ret) level[now]=0;
  59. return ret;
  60. }
  61. inline void Dinic(){
  62. while(bfs()) F+=dfs(S,Inf);
  63. }
  64. int main(){
  65. n=gi();
  66. for(RG int i=1;i<=n;i++)
  67. for(RG int j=1;j<=n;j++) b[i][j]=gi();
  68. for(RG int i=1;i<=n;i++) C[i]=gi(),tot+=C[i];
  69. S=0,T=n+n*n+1;int ans=0,tt=n;
  70. for(RG int i=1;i<=n;i++) lnk(i,T,C[i]);
  71. for(RG int i=1;i<=n;i++){
  72. for(RG int j=1;j<=n;j++){
  73. tt++;lnk(S,tt,b[i][j]);ans+=b[i][j];
  74. lnk(tt,i,Inf);lnk(tt,j,Inf);
  75. }
  76. }
  77. Dinic();printf("%d\n",ans-F);
  78. return 0;
  79. }

  

bzoj 3996: [TJOI2015]线性代数的更多相关文章

  1. bzoj 3996: [TJOI2015]线性代数 [最小割]

    3996: [TJOI2015]线性代数 题意:给出一个NN的矩阵B和一个1N的矩阵C.求出一个1*N的01矩阵A.使得 \(D=(A * B-C)* A^T\)最大.其中A^T为A的转置.输出D.每 ...

  2. ●BZOJ 3996 [TJOI2015]线性代数

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3996 题解: 好题啊.(不太熟悉矩阵相关,所以按某些博主的模型转换来理解的)首先,那个式子可 ...

  3. bzoj 3996 [TJOI2015]线性代数——最小割

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3996 b[ i ][ j ] 要计入贡献,当且仅当 a[ i ] = 1 , a[ j ] ...

  4. bzoj 3996: [TJOI2015]线性代数【最小割】

    把转置矩阵看成逆矩阵吓傻了233 首先按照矩乘推一下式子: \[ D=\sum_{i=1}^n a[i]*(\sum_{j=1}^n a[j]*b[j][i])-c[i] \] \[ D=(\sum_ ...

  5. 【BZOJ 3996】 3996: [TJOI2015]线性代数 (最小割)

    3996: [TJOI2015]线性代数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1368  Solved: 832 Description 给 ...

  6. 【BZOJ】3996: [TJOI2015]线性代数

    题意 给出一个\(N \times N\)的矩阵\(B\)和一个\(1 \times N\)的矩阵\(C\).求出一个\(1 \times N\)的01矩阵\(A\),使得\[ D = ( A * B ...

  7. 【BZOJ3996】[TJOI2015]线性代数(最小割)

    [BZOJ3996][TJOI2015]线性代数(最小割) 题面 BZOJ 洛谷 题解 首先把式子拆开,发现我们的答案式就是这个: \[\sum_{i=1}^n\sum_{j=1}^n B_{i,j} ...

  8. BZOJ_3996_[TJOI2015]线性代数_最大权闭合子图

    BZOJ_3996_[TJOI2015]线性代数_最大权闭合子图 Description 给出一个N*N的矩阵B和一个1*N的矩阵C.求出一个1*N的01矩阵A.使得 D=(A*B-C)*A^T最大. ...

  9. 【LG3973】[TJOI2015]线性代数

    [LG3973][TJOI2015]线性代数 题面 洛谷 题解 正常解法 一大堆矩阵乘在一起很丑对吧 化一下柿子: \[ D=(A*B-C)*A^T\\ \Leftrightarrow D=\sum_ ...

随机推荐

  1. HTML5到底将给企业带来什么?

    HTML5 是近年来互联网行业的热门词汇,火的很.有人高调宣称"APP 将在几年内灭亡,HTML5 取而代之" 改变企业网络广告的模式与分布 广告是企业网络营销的主要方式之一 十几 ...

  2. laravel MethodNotAllowedHttpException错误一个原因

    前两天在写api的时候,出现一个之前都没有碰到过的问题,如图 可以说提示信息是很不友好了,然后打开错误日志,发现报了一个MethodNotAllowedHttpException这样的错误,这样错误我 ...

  3. 晓莲说-何不原创:如何通过jad把class批量反编译成java文件

    背景:前几天在项目开发的时候遇到一个问题,那就是利用myeclipse编写好的一个项目打包成jar包后上传部署到服务器里,之后本地的项目被自己改来改去出现了一些问题,想着把上传到服务器里面的war包下 ...

  4. scrapy初试水 day01

    1.安装pip install Scrapy#一定要以管理员身份运行dos窗口conda install scrapy2.创建项目scrapy startproject hello3.在hello/s ...

  5. UVA 1508 - Equipment dp状态压缩

    题意:  已知n个5元组,从中选出k组,使得这些组中5个位置,每个位置上最大数之和最大. 分析:当k>5时,就是n个5元组最大的数之和,当k<5时,就当做5元组,状态压缩,用00000表示 ...

  6. icheck如何修改样式大小

    icheck默认样式比较大,有需求调整checkbox大小. 1. 最简单的方法可用css3来实现,让整个模块层缩放,不兼容低版本浏览器. transform:scale(0.7,0.7)   2. ...

  7. HDU2159--二维费用背包,三重背包

    FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  8. XAMPP重要文件目录及配置

    一.XAMPP 的安装过程 1:下载XAMPP 的 Linux 版 (1.7.4) http://www.apachefriends.org/en/xampp-linux.html#374 2:安装( ...

  9. 【Codeforces 837D】Round Subset

    http://codeforces.com/contest/837/problem/D 分解质因数,即第i个数的因子2的个数为c2[i],因子5的个数为c5[i],末尾零的个数就是min{Σc2[i] ...

  10. object 覆盖 div 在IE 和Firefox 的解决方案

    问题描述 公司产品需要在三维(3D)控件上显示弹框,按钮等,然而三维控件的object覆盖了div,弹框和按钮不能显示 firefox 解决方案 最外层div的背景使用不透明背景色,必须是不透明的哦 ...