【BZOJ】3996: [TJOI2015]线性代数
题意
给出一个\(N \times N\)的矩阵\(B\)和一个\(1 \times N\)的矩阵\(C\)。求出一个\(1 \times N\)的01矩阵\(A\),使得$$ D = ( A * B - C ) * A^T $$最大,其中\(A ^ T\)是矩阵\(A\)的转置。(\(n<=500\))
分析
好神的题。首先我们容易推出一个式子:
\]
题解
选\(b_{i, j}\)则必须选\(a_i\)、\(a_j\),而选\(a_i\)就必须选\(c_i\)。
那么可以看成:
\(a_i\)为一个点,权值为\(-c_i\),表示选了\(a_i\)就必须选\(c_i\)
\(b_{i, j}\)为一个点,权值为\(b_{i, j}\),向\(a_i、a_j\)连有向边,表示选了\(b_{i, j}\)就必须选\(a_i、a_j\)。
于是问题变成求最大权闭合子图....
由于某种原因,这个网络流跑的飞起?似乎成了二分图复杂度变成\(O(mn^{0.5})\)了?感觉不科学啊QAQ
#include <bits/stdc++.h>
using namespace std;
inline int getint() {
int x=0, c=getchar();
for(; c<48||c>57; c=getchar());
for(; c>47&&c<58; x=x*10+c-48, c=getchar());
return x;
}
const int N=605, vN=N*N+N, oo=~0u>>1;
int ihead[vN], cnt=1;
struct E {
int next, to, cap;
}e[6*N*N+2*N];
inline void add(int x, int y, int cap) {
e[++cnt]=(E){ihead[x], y, cap}; ihead[x]=cnt;
e[++cnt]=(E){ihead[y], x, cap}; ihead[y]=cnt;
}
inline int min(const int &a, const int &b) {
return a<b?a:b;
}
int isap(int s, int t, int n) {
static int gap[vN], cur[vN], d[vN], p[vN];
gap[0]=n;
int r=0, x=s, i, f;
for(; d[s]<n;) {
for(i=cur[x]; i && !(e[i].cap && d[x]==d[e[i].to]+1); i=e[i].next);
if(i) {
p[e[i].to]=cur[x]=i;
if((x=e[i].to)==t) {
for(f=oo, x=t; x!=s; f=min(f, e[p[x]].cap), x=e[p[x]^1].to);
for(r+=f, x=t; x!=s; e[p[x]].cap-=f, e[p[x]^1].cap+=f, x=e[p[x]^1].to);
}
}
else {
if(!--gap[d[x]]) break;
d[x]=n;
for(i=ihead[x]; i; i=e[i].next) {
if(e[i].cap && d[x]>d[e[i].to]+1) {
d[x]=d[e[i].to]+1;
cur[x]=i;
}
}
++gap[d[x]];
if(x!=s) x=e[p[x]^1].to;
}
}
return r;
}
int main() {
int n=getint(), sum=0, S, T;
S=n*(n+1)+1, T=S+1;
for(int i=1; i<=n; ++i) {
for(int j=1; j<=n; ++j) {
int id=i*n+j, w=getint();
add(id, T, w);
if(i!=j) add(i, id, oo);
add(j, id, oo);
sum+=w;
}
}
for(int i=1; i<=n; ++i) {
add(S, i, getint());
}
printf("%d\n", sum-isap(S, T, T));
return 0;
}
【BZOJ】3996: [TJOI2015]线性代数的更多相关文章
- 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]线性代数
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3996 题解: 好题啊.(不太熟悉矩阵相关,所以按某些博主的模型转换来理解的)首先,那个式子可 ...
- bzoj 3996 [TJOI2015]线性代数——最小割
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3996 b[ i ][ j ] 要计入贡献,当且仅当 a[ i ] = 1 , a[ j ] ...
- bzoj 3996: [TJOI2015]线性代数
Description 给出一个N*N的矩阵B和一个1*N的矩阵C.求出一个1*N的01矩阵A.使得 D=(A*B-C)*A^T最大.其中A^T为A的转置.输出D Input 第一行输入一个整数N,接 ...
- bzoj 3996: [TJOI2015]线性代数【最小割】
把转置矩阵看成逆矩阵吓傻了233 首先按照矩乘推一下式子: \[ D=\sum_{i=1}^n a[i]*(\sum_{j=1}^n a[j]*b[j][i])-c[i] \] \[ D=(\sum_ ...
- 【BZOJ 3996】 3996: [TJOI2015]线性代数 (最小割)
3996: [TJOI2015]线性代数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1368 Solved: 832 Description 给 ...
- 【BZOJ3996】[TJOI2015]线性代数(最小割)
[BZOJ3996][TJOI2015]线性代数(最小割) 题面 BZOJ 洛谷 题解 首先把式子拆开,发现我们的答案式就是这个: \[\sum_{i=1}^n\sum_{j=1}^n B_{i,j} ...
- BZOJ_3996_[TJOI2015]线性代数_最大权闭合子图
BZOJ_3996_[TJOI2015]线性代数_最大权闭合子图 Description 给出一个N*N的矩阵B和一个1*N的矩阵C.求出一个1*N的01矩阵A.使得 D=(A*B-C)*A^T最大. ...
- 【LG3973】[TJOI2015]线性代数
[LG3973][TJOI2015]线性代数 题面 洛谷 题解 正常解法 一大堆矩阵乘在一起很丑对吧 化一下柿子: \[ D=(A*B-C)*A^T\\ \Leftrightarrow D=\sum_ ...
随机推荐
- (转载) 利用国内的镜像,加速PIP下载
国内源: 新版ubuntu要求使用https源,要注意. 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.c ...
- yii2 登录用户和未登录用户使用不同的 layout
可以在配置文件中增加一个 “beforeRequest” 事件: 'on beforeRequest' => function () { Yii::$app->layout = Yii:: ...
- CSS3中的px,em,rem,vh,vw辨析
1.px:像素,精确显示 2.em:继承父类字体的大小,相当于"倍",如:浏览器默认字体大小为16px=1em,始终按照div继承来的字体大小显示,进场用于移动端 em换算工具:h ...
- set和map的简单用法
.set(集合)map(映射)都属于关联类容器 都支持查询一个元素是否存在并能够有效地获取元素. set集合的元素总是从小到大排列,set集合通过二分查找树实现.它具备以下两个特点: ①:独一无二的元 ...
- [Sass]混合宏的参数
[Sass]混合宏的参数--传一个不带值的参数 Sass 的混合宏有一个强大的功能,可以传参,那么在 Sass 中传参主要有以下几种情形: A) 传一个不带值的参数 在混合宏中,可以传一个不带任何值的 ...
- sqlserver添加主键
sqlServer中给表添加主键的sql: alter table market_media_medical_history alter column pk_id bigint not null; a ...
- redirect问题
场景如下: 在后台写了一个filter,拦截*.wx的请求,filter内逻辑忽略,最后response.sendRedirect(url)(这个url是相对地址),重定向到另一个页面. 问题来了:一 ...
- 源码安装php
php安装扩展源yum install epel-releaseyum updateyum install libmcrypt libmcrypt-devel mcrypt mhash -yyum i ...
- Arcgis与CityEngine安装破解
Arcgis与CityEngine共存,实现同时破解 作为一个GIS背景的技术人员,以前安装了无数次的Arcgis DeskTop,到了新公司后,今天主管让我学习下CityEngine,学渣的我之前没 ...
- git与github使用
Git和Github简单教程 目录: 零.Git是什么 一.Git的主要功能:版本控制 二.概览 三.Git for Windows软件安装 四.本地Git的使用 五.Github与Git的关联 六. ...