BZOJ3996 线性代数
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3996
转化题目给的条件
$$D = \sum_{i=1}^n \sum_{j=1}^n{A(i)A(j)B(i,j)} - \sum_{i=1}^n C(i)A(i)$$
网络流可解,如果要得到 $B(i,j)$ 的话必须选$i$物品和$j$物品然后,选择每一个物品都有其代价。
最大权闭合子图。
再流网络中割掉一条边就是舍弃一个$B(i,j)$
所以最小割即可。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue> #define N 1100010
#define INF 0x3f3f3f3f using namespace std; struct edge{
int x,to,cap;
}E[N<<]; int n,B[][],C[N],totE,g[N],S,T,h[N],tot;
queue<int> q;
bool v[N]; #define p E[i].x void ade(int x,int y,int cap){
E[++totE]=(edge){y,g[x],cap}; g[x]=totE;
E[++totE]=(edge){x,g[y],}; g[y]=totE;
} bool bfs(){
memset(v,,sizeof(v));
q.push(S); h[S]=; v[S]=;
while(!q.empty()){
int x=q.front(); q.pop();
for(int i=g[x];i;i=E[i].to)
if(E[i].cap&&!v[p]){
h[p]=h[x]+;
q.push(p); v[p]=;
}
}
return v[T];
} int dinic(int x,int flow){
if(x==T||!flow) return flow;
int f=;
for(int i=g[x];i&&flow;i=E[i].to)
if(h[p]==h[x]+&&E[i].cap){
int tmp=dinic(p,min(flow,E[i].cap));
E[i].cap-=tmp; E[i^].cap+=tmp;
f+=tmp; flow-=tmp;
}
if(!f) h[x]=-;
return f;
} int main(){
scanf("%d",&n);
for(int i=,j;i<=n;i++)
for(j=;j<=n;j++) scanf("%d",&B[i][j]);
for(int i=;i<=n;i++) scanf("%d",&C[i]);
S=n*n+n+; T=S+;
for(int i=;i<=n;i++) ade(i,T,C[i]);
int ans=;
tot=n;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++){
ans+=B[i][j];
ade(S,++tot,B[i][j]);
ade(tot,j,INF);
ade(tot,i,INF);
}
while(bfs()) ans-=dinic(S,INF);
printf("%d\n",ans);
return ;
}
看来真的需要补线性代数呀。
BZOJ3996 线性代数的更多相关文章
- [TJOI2014] [Bzoj3996] 线性代数 [网络流,最小割]
由原式,可以推出D=Σ(i=1,n,Σ(j=1,n,A[i]*A[j]*B[i][j]))-Σ(i=1,n,A[i]*C[i]) $D=\sum\limits_{i=1}^{n}\sum\limits ...
- 【BZOJ3996】[TJOI2015]线性代数(最小割)
[BZOJ3996][TJOI2015]线性代数(最小割) 题面 BZOJ 洛谷 题解 首先把式子拆开,发现我们的答案式就是这个: \[\sum_{i=1}^n\sum_{j=1}^n B_{i,j} ...
- 【BZOJ3996】[TJOI2015]线性代数 最大权闭合图
[BZOJ3996][TJOI2015]线性代数 Description 给出一个N*N的矩阵B和一个1*N的矩阵C.求出一个1*N的01矩阵A.使得 D=(A*B-C)*A^T最大.其中A^T为A的 ...
- 【BZOJ-3996】线性代数 最小割-最大流
3996: [TJOI2015]线性代数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1054 Solved: 684[Submit][Statu ...
- BZOJ3996 [TJOI2015]线性代数
就是求$D = A \times B \times A^T - C \times A^T$ 展开也就是$$D = \sum_{i, j} A_i * A_j * B_{i, j} - \sum_{i} ...
- BZOJ3996[TJOI2015]线性代数——最小割
题目描述 给出一个N*N的矩阵B和一个1*N的矩阵C.求出一个1*N的01矩阵A.使得 D=(A*B-C)*A^T最大.其中A^T为A的转置.输出D 输入 第一行输入一个整数N,接下来N行输入B矩阵, ...
- BZOJ3996:[TJOI2015]线性代数(最大权闭合子图)
Description 给出一个N*N的矩阵B和一个1*N的矩阵C.求出一个1*N的01矩阵A.使得 D=(A*B-C)*A^T最大.其中A^T为A的转置.输出D Input 第一行输入一个整数N,接 ...
- BZOJ3996 TJOI2015线性代数
先把矩阵式子化简 原式=∑i=1n∑j=1nA[i]∗B[i][j]∗A[j]−∑i=1nA[i]∗C[i] 因此我们发现问题转化为选取一个点所获收益是B[i][j],代价是C[i][j] 这是一个最 ...
- BZOJ3996 [TJOI2015]线性代数 【最小割】
题目 给出一个NN的矩阵B和一个1N的矩阵C.求出一个1*N的01矩阵A.使得 D=(AB-C)A^T最大.其中A^T为A的转置.输出D 输入格式 第一行输入一个整数N,接下来N行输入B矩阵,第i行第 ...
随机推荐
- mysql 密碼忘記 解決
WINDOW 1.my.ini 加入 [mysqld] skip-grant-tables 2.mysql -uroot -p 登入 USE MYSQL: update user set passwo ...
- 【Vue 学习系列 - 01】- 环境搭建(Win7)
1. 根据系统下载Node.js 下载地址:http://nodejs.cn/download 2. 安装Node.js 点击安装Node.js,在安装目录D:\Program Files\nodej ...
- ssh 卡主
偶尔会遇到这样的现象 ssh 登录一台远程机器,显示下面的信息然后hang在那 Connecting to 192.168.137.102:22... Connection established. ...
- android 查看手机运行的进程列表
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...
- 【Todo】Java类型转换总结
参考 http://www.cnblogs.com/lwbqqyumidi/p/3700164.html 这篇文章也可以对照着看:http://www.360doc.com/content/10/09 ...
- 自动化运维工具Fabric - 密码管理(env.password and ssh key)
在使用 Fabric 的过程中,如果大批量服务器处理的话,我们就需要针对配置主机的密码,每台主机的密码相同还好,不同的话,就需要针对不同的主机做配置了,以下有两种配置方式 注:本文主要参考官方文档 P ...
- 使用nginx转发不了静态文件
从django runserver的请求来看,都收不到静态文件请求, 查看firefox的web console请求,发现都是403 然后发现nginx不在当前用户组,并且当前用户的项目的读写权限是7 ...
- Windows-速度优化的几个方面
One. Win+R - > cmd- > msconfig 禁用不需要的启动项! Two. 关闭一些视觉选项 Three. 设置应用启动快捷键
- HDU1114 Piggy-Bank 【全然背包】
Piggy-Bank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- 基于jquery 全选、反选、各行换色、单击行选中事件实现代码
<script language="javascript"> $(document).ready(function(){ //各行换色 $('table tr:odd' ...