[TJOI2015]线性规划
题目:洛谷P3973、BZOJ3996。
题目大意:
给你n,参数b[][]和c[](里面的数均>0),要你求一个数组A[](0/1,1表示选择),已知:
1. 若同时选择X和Y,获得B[x][y]收益
2. 若选择了X,需要C[x]的代价
求最大的收益
解题思路:
我们将第一个条件转化为:若不同时选择X和Y,需要B[x][y]的代价。
然后,建最小割模。
将(i,j)看成一个点,从S向其连容量为B[i][j]+B[j][i](若i=j则只连B[i][j])。
将每个i看成一个点,向T连容量为C[i]的边。
然后因为选(i,j)必须要选i和j,所以从(i,j)分别向i和j连容量∞的边(i=j则只连一条)。
求出最小割,然后答案就是sum(B)-最小割。
C++ Code:
#include<bits/stdc++.h>
#define N 1005
#define INF 0x3f3f3f3f
int dis[N*N+N+5],iter[N*N+N+5],cnt=1,head[N*N+N+5],B[505][505],C[505],n,sm=0,level[N*N+N+5],q[7000005];
bool vis[N*N+N+5];
struct edge{
int from,to,cap,nxt;
}e[(N*N+N+5)<<2];
inline int readint(){
int c=getchar(),d=0;
for(;!isdigit(c);c=getchar());
for(;isdigit(c);c=getchar())
d=(d<<3)+(d<<1)+(c^'0');
return d;
}
inline void addedge(const int from,const int to,const int cap){
e[++cnt]=(edge){from,to,cap,head[from]};
head[from]=cnt;
e[++cnt]=(edge){to,from,0,head[to]};
head[to]=cnt;
}
void bfs(int s){
memset(level,-1,sizeof(level));
level[s]=0;
int l=0,r=1;
q[1]=s;
while(l!=r){
int u=q[l=l%7000000+1];
for(int i=head[u];i!=-1;i=e[i].nxt){
int v=e[i].to;
if(level[v]<0&&e[i].cap>0){
level[v]=level[u]+1;
q[r=r%7000000+1]=v;
}
}
}
}
int dfs(int u,int t,int f){
if(u==t)return f;
for(int& i=iter[u];i!=-1;i=e[i].nxt){
int v=e[i].to;
if(e[i].cap>0&&level[v]>level[u]){
int d=dfs(v,t,std::min(f,e[i].cap));
if(d){
e[i].cap-=d;
e[i^1].cap+=d;
return d;
}else level[v]=-1;
}
}
return 0;
}
int max_flow(int s,int t){
int flow=0;
while(1){
bfs(s);
if(level[t]<0)return flow;
memcpy(iter,head,sizeof(iter));
int f;
while(f=dfs(s,t,INF))flow+=f;
}
}
int main(){
n=readint();
memset(head,-1,sizeof head);
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)sm+=(B[i][j]=readint());
for(int i=1;i<=n;++i)C[i]=readint();
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j){
int flow=(i==j)?B[i][i]:B[i][j]+B[j][i];
addedge(0,(i-1)*n+j,flow);
addedge((i-1)*n+j,n*n+i,INF);
if(i!=j)addedge((i-1)*n+j,n*n+j,INF);
}
for(int i=1;i<=n;++i)addedge(n*n+i,n*n+n+1,C[i]);
printf("%d\n",sm-max_flow(0,n*n+n+1));
}
[TJOI2015]线性规划的更多相关文章
- 使用Python scipy linprog 线性规划求最大值或最小值(使用Python学习数学建模笔记)
函数格式 scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method='simp ...
- java 线性规划 和lingo 比较
model:max=13*A+ 23*B; 5*A + 15*B <480 ; 4*A + 4 *B <160 ; 35* A + 20 *B <1190 ; end Variabl ...
- 对偶理论、拉格朗日对偶问题、LP线性规划对偶性质
Lagrange 对偶问题 定义其的对偶问题: Lagrange函数 考虑线性规划问题 若取集合约束D={x|x≥0},则该线性规划问题的Lagrange函数为 线性规划的对偶问题为: 对偶定理原问题 ...
- 用Microsoft.Solver.Foundation进行线性规划,为WPF应用添加智能
在管理信息系统的开发过程中,往往会涉及到一些线性规划数学模型,例如资源配置优化.微软的Microsoft.Solver.Foundation是一个数学库,可以很好的对线性规划问题进行求解.关于它的细节 ...
- 【线性规划与网络流 24题】已完成(3道题因为某些奇怪的原因被抛弃了QAQ)
写在前面:SDOI2016 Round1滚粗后蒟蒻开始做网络流来自我拯救(2016-04-11再过几天就要考先修课,现在做网络流24题貌似没什么用←退役节奏) 做的题目将附上日期,见证我龟速刷题. 1 ...
- matlab绘图--线性规划图解法示意
matlab绘图--线性规划图解法示意 图解法 matlab绘图 区域填充 线性规划问题: matlab绘图 L1=[4,0;4,4]; plot(L1(:,1),L1(:,2));hold on ...
- hdu 4091 线性规划
分析转自:http://blog.csdn.net/dongdongzhang_/article/details/7955136 题意 : 背包能装体积为N, 有两种宝石, 数量无限, 不能切割. ...
- 建模算法(一)——线性规划
一.解决问题 主要是安排现有资源(一定),取得最好的效益的问题解决,而且约束条件都是线性的. 二.数学模型 1.一般数学模型 2.MATLAB数学模型 其中c,x都是列向量,A,Aeq是一个合适的矩阵 ...
- UVA 10498 Happiness(线性规划-单纯形)
Description Prof. Kaykobad has given Nasa the duty of buying some food for the ACM contestents. Nasa ...
随机推荐
- 【JavaScript框架封装】JavaScript中的文本字符串的转义和反转义的实现
如果是想把本地的一个字符串串存到服务器,再次取出来的还是文本的话,就需要这个文本字符串的转义: /** * 对一个字符串的转义 * @param str * @return {*} */ functi ...
- hdu 4826
hdu 4826 题意 度度熊是一只喜欢探险的熊,一次偶然落进了一个 $ m * n $ 矩阵的迷宫,该迷宫只能从矩阵左上角第一个方格开始走,只有走到右上角的第一个格子才算走出迷宫,每一次只能走一格, ...
- 【Computer Vision】 复现分割网络(1)——SegNet
目录 Tags: ComputerVision 编译 数据处理 训练结果 Reference Tags: ComputerVision 编译 src/caffe/layers/contrastive_ ...
- Linux下MATLAB安装及使用
安装过程 1.在在media目录下创建matlab文件夹,并挂载R2017b_glnxa64_dvd1.iso镜像文件 sudo mkdir /media/matlab sudo mount -t a ...
- powershell远程访问
在服务器上打开powershell 1.winrm quickconfig 2.Enable-PSRemoting -Force 在客户端上打开powershell 1.Enter-PSSession ...
- BA-siemens-BA模块特性
PXC24(包含UEC24的模块特性) DO点可以接220vac的电压,渠道人员告知电流不要超过2A AO点只能输出0-10V的电压,不能输出4-20ma的电流,说明书上是错误的 AO点输出10v失败 ...
- 【基础训练】HDOJ2032杨辉三角
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWEdzaWxlbmNl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- wifi共享精灵2014.04.25.001已经更新,wifi热点中文名走起!
五一回来后,有个惊喜,wifi共享精灵有了最新动向.不晓得wifi共享精灵是啥的朋友,我来解释下,它就相当于一个无线路由器.说起来,Wifi共享精灵正式版2014.04.25.001(http://w ...
- ubuntu中写一个shell脚本的过程
gedit hello.sh ,然后输入 #!/bin/bash echo "Hello world!" chmod +x hello.sh ./hello.sh
- Apache + Tomcat 负载均衡 session复制
转自:http://blog.csdn.net/cssmhyl/article/details/8455400 http://snowolf.iteye.com/blog/743611 Apache ...