BZOJ3996 TJOI2015线性代数
先把矩阵式子化简
原式=∑i=1n∑j=1nA[i]∗B[i][j]∗A[j]−∑i=1nA[i]∗C[i]
因此我们发现问题转化为选取一个点所获收益是B[i][j],代价是C[i][j]
这是一个最小割问题。
先把答案记做所有b的和。
将边按照s——>p[i][j](b[i][j]) p[i][j]——>i p[i][j]——>j i——>t(c[i])这样建图后我们删去的那个最小割意义就是花费最少的使得整个图不连通的量
如果删在左边就意味着这件物品我们不要了,如果删去右边的话就说明这件物品我们要付钱。
By:大奕哥
#include<bits/stdc++.h>
using namespace std;
const int N=,inf=1e9;
int head[N],cnt=-,n,b[][],c[];
struct node{
int to,nex,w;
}e[];
void add(int x,int y,int w)
{
e[++cnt].to=y;e[cnt].nex=head[x];head[x]=cnt;e[cnt].w=w;
e[++cnt].to=x;e[cnt].nex=head[y];head[y]=cnt;e[cnt].w=;
}
int d[N],v[N],s,t;
queue<int>q;
bool bfs()
{
memset(v,,sizeof(v));
memset(d,-,sizeof(d));
d[s]=;q.push(s);
while(!q.empty())
{
int x=q.front();q.pop();v[x]=;
for(int i=head[x];i!=-;i=e[i].nex)
{
int y=e[i].to;
if(d[y]!=-||!e[i].w)continue;
d[y]=d[x]+;
if(!v[y]){
q.push(y);v[y]=;
}
}
}
return d[t]!=-;
}
int dfs(int x,int w,int yy)
{
if(!w||x==yy)return w;
int s=;
for(int i=head[x];i!=-;i=e[i].nex)
{
int y=e[i].to;
if(d[y]!=d[x]+||!e[i].w)continue;
int flow=dfs(y,min(e[i].w,w-s),yy);
if(!flow)d[y]=-;
e[i].w-=flow;e[i^].w+=flow;s+=flow;
if(s==w)return s;
}
return s;
}
int main()
{
scanf("%d",&n);int sum=,num=;
memset(head,-,sizeof(head));
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
{
scanf("%d",&b[i][j]);
}
t=n*n+n+;
for(int i=;i<=n;++i)
scanf("%d",&c[i]),add(i+n*n,t,c[i]);
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
{
sum+=b[i][j];
add(s,++num,b[i][j]);
add(num,i+n*n,inf);
add(num,j+n*n,inf);
}
while(bfs()){
sum-=dfs(s,1e9,t);
}
printf("%d\n",sum);
return ;
}
BZOJ3996 TJOI2015线性代数的更多相关文章
- 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]线性代数 【最小割】
题目 给出一个NN的矩阵B和一个1N的矩阵C.求出一个1*N的01矩阵A.使得 D=(AB-C)A^T最大.其中A^T为A的转置.输出D 输入格式 第一行输入一个整数N,接下来N行输入B矩阵,第i行第 ...
- 【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 ...
- bzoj 3996: [TJOI2015]线性代数 [最小割]
3996: [TJOI2015]线性代数 题意:给出一个NN的矩阵B和一个1N的矩阵C.求出一个1*N的01矩阵A.使得 \(D=(A * B-C)* A^T\)最大.其中A^T为A的转置.输出D.每 ...
- BZOJ_3996_[TJOI2015]线性代数_最大权闭合子图
BZOJ_3996_[TJOI2015]线性代数_最大权闭合子图 Description 给出一个N*N的矩阵B和一个1*N的矩阵C.求出一个1*N的01矩阵A.使得 D=(A*B-C)*A^T最大. ...
随机推荐
- 29、HashSet简介
Set的特点 Set里面存储的元素不能重复,没有索引,存取顺序不一致. package com.monkey1024.set; import java.util.HashSet; /** * Set的 ...
- HTML5之2D物理引擎 Box2D for javascript Games 系列 第一部分
我要的是能在H5页面上跑的javascript版的Box2D啊!!! 最近想学习Javascript版本的Box2D JS物理引擎,无奈搜了半天也没找到相对比较系统的资料 官方网站也只是简单的介绍,A ...
- Linux嵌入式交叉编译环境 的搭建【转】
转自:http://blog.csdn.net/woaixiaozhe/article/details/7395435 1. 安装标准的C开发环境,由于Linux安装默认是不安装的,所以需要先安装一下 ...
- Linux内存初始化【转】
转自:http://www.cnblogs.com/super-king/p/3291120.html start_kernel -> setup_arch 在这个函数中我们主要看这几个函数. ...
- Nginx常见错误与问题之解决方法技术指南
Nginx常见错误与问题之解决方法技术指南. 安装环境: 系统环境:redhat enterprise 6.5 64bit 1.Nginx 常见启动错误 有的时候初次安装nginx的时候会报这样的 ...
- Python匿名函数详解
python 使用 lambda 来创建匿名函数. lambda这个名称来自于LISP,而LISP则是从lambda calculus(一种符号逻辑形式)取这个名称的. 在Python中,lambda ...
- jQuery之字体大小的设置
先获取字体大小,进行处理. 再将修改的值保存. slice() 方法可从已有的数组中返回选定的元素.arrayObject.slice(start,end).start 必需.规定从何处开始选 ...
- jmeter之数据库
https://www.cnblogs.com/ShadowXie/p/6007515.html
- sql查询与修改数据库逻辑文件名,移动数据库存储路径
USE mydb GO --1.查询当前数据库的逻辑文件名 ) ) AS 'File Name 2'; --或通过以下语句查询: --SELECT name FROM sys.database_fil ...
- 使用文本用户界面(NMTUI)进行网络配置
NetworkManager 文本用户界面(TUI)工具 nmtui 可提供一个文本界面配置由 NetworkManager 控制的网络.该工具包含在 NetworkManager-tui 子软件包中 ...