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 PROCEDURE ANALYSE() 用法
PROCEDURE ANALYSE() 会让 MySQL 帮你去分析你的字段和其实际的数据,并会给你一些有用的建议.只有表中有实际的数据,这些建议才会变得有用,因为要做一些大的决定是需要有数据作为基础 ...
- How do I get an image from an UIButton? 如何获取uibutton设置的uiimage
UIImage*img =[button imageForState:UIControlStateNormal];
- js时间戳和时间格式之间的转换
//时间戳转换成日期时间2014-8-8 下午11:40:20 function formatDate(ns){ return new Date(parseInt(ns) * 1000).toLoca ...
- centos6安装debuginfo
查看内核版本,查找对应的内核rpm文件 [root@localhost ~]#uname -rsp Linux 3.10.0-229.1.2.el7.x86_64 x86_64 去debuginfo. ...
- 使用RTL-SDR,从打开一个车门到批量打开车门
在最近几年,入侵汽车在当代社会的黑客圈中成为热点,很多文章表明汽车产业还有很多东西等待完善,在本篇文章中,我会让你熟悉我一直研究的一些概念,以及如何在网状网络中使用一些便宜的部件渗透远程开门系统. 软 ...
- 将一个文件从gbk编码转换为utf8编码
用django展示模板时,出现如下错误: 'utf8' codec can't decode byte 0xd3 in position 197: invalid continuation byte ...
- springcloud 学习笔记
---恢复内容开始--- 1. pom配置 1.1 引入spring boot 依赖 <parent> <groupId>org.springframework.boot< ...
- iOS之UI--使用SWRevealViewController 实现侧边菜单功能详解实例
iOS之UI--使用SWRevealViewController 实现侧边菜单功能详解实例 使用SWRevealViewController实现侧边菜单功能详解 下面通过两种方法详解SWReveal ...
- (转载)解决MySql 数据库 提示:1045 access denied for user 'root'@'localhost' using password yes
今天想用用MySQL 数据库 谁知道老提示 1045 access denied for user 'root'@'localhost' using password yes 最后在csdn 上找到 ...
- POJ 2586 Y2K Accounting Bug(枚举大水题)
Y2K Accounting Bug Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10674 Accepted: 53 ...