题目描述

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

D=(A*B-C)*A^T最大。其中A^T为A的转置。输出D
题解
观察上面那个式子发现,当一个bij有贡献时当且仅当a[i]=1&&a[j]=1
且当a[i]=1时会产生-c[i]的贡献。
然后我naive的以为这是个二元关系最小割。
其实没那么复杂,我们建立源点向矩阵中的每一个元素连b[i][j]的边,然后每个元素向t连c[i]的边。
然后(i,j)ij分别连inf的边。
这样割左边相当于ij至少有一个不选,割右边相当于全选。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define N 502
#define M 260020
#define inf 2e9
using namespace std;
typedef long long ll;
queue<int>q;
typedef long long ll;
int head[M],deep[M],cur[M],tot=,n,c[N],b[N][N],top;
ll sum,ans;
inline ll rd(){
ll x=;char c=getchar();bool f=;
while(!isdigit(c)){if(c=='-')f=;c=getchar();}
while(isdigit(c)){x=(x<<)+(x<<)+(c^);c=getchar();}
return f?-x:x;
}
struct edge{int n,to,l;}e[N*N*];
inline void add(int u,int v,int l){
e[++tot].n=head[u];e[tot].to=v;head[u]=tot;e[tot].l=l;
e[++tot].n=head[v];e[tot].to=u;head[v]=tot;e[tot].l=;
}
inline bool bfs(int s,int t){
memset(deep,,sizeof(deep));
memcpy(cur,head,sizeof(cur));
q.push(s);deep[s]=;
while(!q.empty()){
int u=q.front();q.pop();
for(int i=head[u];i;i=e[i].n){
int v=e[i].to;
if(!deep[v]&&e[i].l){deep[v]=deep[u]+;q.push(v);}
}
}
return deep[t];
}
ll dfs(int u,int t,int l){
if(u==t||!l)return l;
ll flow=,f;
for(int &i=cur[u];i;i=e[i].n){
int v=e[i].to;
if(deep[v]==deep[u]+&&(f=dfs(v,t,min(l,e[i].l)))){
e[i].l-=f;e[i^].l+=f;flow+=f;l-=f;
if(!l)break;
}
}
return flow;
}
int main(){
n=rd();int s=,t=n*n+n+;
for(int i=;i<=n;++i)for(int j=;j<=n;++j){
b[i][j]=rd(),sum+=b[i][j];++top,add(,top,b[i][j]);
add(top,n*n+i,inf);add(top,n*n+j,inf);
}
for(int i=;i<=n;++i)c[i]=rd(),add(n*n+i,t,c[i]);
while(bfs(s,t))ans+=dfs(s,t,inf);
cout<<sum-ans;
return ;
}
 

[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. 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矩阵, ...

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

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

  4. 【BZOJ-3996】线性代数 最小割-最大流

    3996: [TJOI2015]线性代数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1054  Solved: 684[Submit][Statu ...

  5. BZOJ 3996 线性代数 最小割

    题意: 给出一个N*N的矩阵B和一个1*N的矩阵C.求出一个1*N的01矩阵A.使得 D=(A*B-C)*A^T最大.其中A^T为A的转置.输出D 分析: 这道题比较绕,我们需要看清题目中那个式子的本 ...

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

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

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

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

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

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

  9. BZOJ3996 [TJOI2015]线性代数 【最小割】

    题目 给出一个NN的矩阵B和一个1N的矩阵C.求出一个1*N的01矩阵A.使得 D=(AB-C)A^T最大.其中A^T为A的转置.输出D 输入格式 第一行输入一个整数N,接下来N行输入B矩阵,第i行第 ...

随机推荐

  1. Android下的软件合集

    在平常使用Android手机的时候,选择一个好的软件可以做到事半功倍的效果,所以在此总结一下,加速我们的工作与生活效率 1) ConnectBot ConnectBot是一个Android操作系统上的 ...

  2. mybatis入门配置和调试

    欢迎转载http://www.cnblogs.com/jianshuai520/p/8669177.html大家一起努力,如果看的时候有图片半边遮挡起来的话,右键查看图片,就可以观看完整的图片,具体怎 ...

  3. vue的地图插件amap

    https://www.jianshu.com/p/0011996b81e2(amap) npm install vue-amap --save

  4. 《笔记》Apache2 mod_wsgi的配置

    接手了一台古老的服务器的还使用的是mod_wsgi,所以需要配置一下.其实这里有点怀念,记得当年自己折腾第一个app的时候,还是个什么都不懂的菜鸡.当时用django搜方案的时候,还不知道有uwsgi ...

  5. Python对elasticsearch的CRUD

    一.官网提供的Elasticsearch的Python接口包 1.github地址:https://github.com/elastic/elasticsearch-dsl-py 2.安装:pip i ...

  6. 算法题 -- 输入一个Long数组,按要求输出一个等长的Long数组

    /** * 输入一个Long数组,按要求输出一个等长的Long数组 * 输出数组的元素值等于,输入数组除相同下标外其他元素的积 * 如:输入[1, 2, 3, 4], 输出[24, 12, 8, 6] ...

  7. Lodop的JS模版代码、文档式模版 生成加载赋值博文索引

    Lodop获取全部JS代码,传统JS模版的生成.LODOP设置打印设计返回JS代码是变量 LodopJS代码模版的加载和赋值 Lodop生成文档式模版 LodopJS文档式模版的加载和赋值 由于加载J ...

  8. Get started with Docker for Windows

    Welcome to Docker for Windows! Docker is a full development platform for creating containerized apps ...

  9. codeforces478C

    Table Decorations CodeForces - 478C 你有r个红的,g个绿的和b个蓝的气球.要为宴会布置一张桌子,你恰好需要三个气球.附在桌子上的三个气球不应该有相同的颜色.如果我们 ...

  10. codeforces703B

    Mishka and trip CodeForces - 703B 小米什卡是一个伟大的旅行者,她访问了许多国家.在这次考虑去哪里旅行之后,她选择了XXX--这个美丽,但鲜为人知的北方国家. 以下是关 ...