bzoj 3996 最小割
公式推出来后想了半天没思路,居然A是01矩阵。。。。。
如果一个问题是求最值,并那么尝试先将所有可能收益加起来,然后矛盾部分能否用最小割表达(本题有两个矛盾,第一个是选还是不选,第二个是i,j有一个不选,就不能获得bij的收益)。
#include <cstdio>
#include <cstring>
#include <vector>
#define N 510
#define S N+N*N
#define E S*10
#define oo 0x3f3f3f3f
#define fill(a,l,r,v) memset(a+l,v,sizeof(a[0])*(r-l+1))
using namespace std; struct Edge {
int u, v, f;
Edge(){}
Edge( int u, int v, int f ):u(u),v(v),f(f){}
};
struct Dinic {
int n, src, dst;
int head[S], next[E], etot;
Edge edge[E];
int dep[S], cur[S], qu[S], bg, ed; void init( int n, int src, int dst ) {
this->n = n;
this->src = src;
this->dst = dst;
fill( head, , n, 0x3f );
}
void adde( int u, int v, int f ) {
next[etot]=head[u], head[u]=etot;
edge[etot++] = Edge(u,v,f);
next[etot]=head[v], head[v]=etot;
edge[etot++] = Edge(v,u,);
}
bool bfs() {
fill(dep,,n,);
qu[bg=ed=] = src;
dep[src] = ;
while( bg<=ed ) {
int u=qu[bg++];
for( int t=head[u]; t!=oo; t=next[t] ) {
Edge &e = edge[t];
if( e.f && !dep[e.v] ) {
qu[++ed] = e.v;
dep[e.v] = dep[e.u]+;
}
}
}
return dep[dst];
}
int dfs( int u, int a ) {
if( u==dst || a== ) return a;
int remain=a, past=, na;
if( cur[u]==- ) cur[u]=head[u];
for( int &t=cur[u]; t!=oo; t=next[t] ) {
Edge &e = edge[t];
Edge &ve = edge[t^];
if( e.f && dep[e.v]==dep[e.u]+ && (na=dfs(e.v,min(e.f,remain))) ) {
remain -= na;
past += na;
e.f -= na;
ve.f += na;
if( !remain ) break;
}
}
return past;
}
int flow() {
int rt = ;
while( bfs() ) {
fill( cur, , n, - );
rt += dfs(src,oo);
}
return rt;
}
}D; int n, src, dst, idc;
int main() {
scanf( "%d", &n );
src = ;
dst = n*n+n+;
idc = ;
D.init( dst, src, dst );
int tot=;
for( int i=; i<=n; i++ )
for( int j=; j<=n; j++ ) {
int bij;
scanf( "%d", &bij );
idc++;
D.adde( src, idc, bij );
D.adde( idc, i, oo );
D.adde( idc, j, oo );
tot += bij;
}
for( int i=; i<=n; i++ ) {
int ci;
scanf( "%d", &ci );
D.adde( src, i, );
D.adde( i, dst, ci );
}
printf( "%d\n", tot-D.flow() );
}
——————
我的最小割好慢。。。
bzoj 3996 最小割的更多相关文章
- BZOJ 1412 & 最小割
什么时候ZJ省选再现一次这么良心的题吧... 题意: 在一个染色的格子画分割线,使其不想连,求最少的线段 SOL: 裸裸的最小割.题目要求两种颜色不想连,我们把他分到两个集合,也就是把所有相连的边切断 ...
- BZOJ 1797 最小割
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1797 题意:给出一个有向图,每条边有流量,给出源点汇点s.t.对于每条边,询问:(1)是 ...
- BZOJ 2229 最小割
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2229 题意:给定一个带权无向图.若干询问,每个询问回答有多少点对(s,t)满足s和t的最 ...
- bzoj 1497 最小割模型
我们可以对于消费和盈利的点建立二分图,开始答案为所有的盈利和, 那么源向消费的点连边,流量为消费值,盈利向汇连边,流量为盈利值 中间盈利对应的消费连边,流量为INF,那么我们求这张图的最小割,用 开始 ...
- bzoj 1934 最小割
收获: 1.流量为0的边可以不加入. 2.最小割方案要与决策方案对应. #include <cstdio> #include <cmath> #include <cstr ...
- bzoj 1934最小割
比较显然的最小割的题,增加节点source,sink,对于所有选1的人我们可以(source,i,1),选0的人我们可以(i,sink,1),然后对于好朋友我们可以连接(i,j,1)(j,i,1),然 ...
- bzoj 1497 最小割
思路:最小割好难想啊,根本想不到.. S -> 用户群 = c[ i ] 基站 -> T = p[ i ] 用户群 -> a[ i ] = inf 用户群 -> b[ i ] ...
- BZOJ 1797 最小割(最小割割边唯一性判定)
问题一:是否存在一个最小代价路径切断方案,其中该道路被切断? 问题二:是否对任何一个最小代价路径切断方案,都有该道路被切断? 现在请你回答这两个问题. 最小割唯一性判定 jcvb: 在残余网络上跑ta ...
- BZOJ - 1497 最小割应用
题意:基站耗费成本,用户获得利益(前提是投入成本),求最大获利 最小割的简单应用,所有可能的收益-(消耗的成本/失去的收益),无穷大边表示冲突,最小割求括号内的范围即可 #include<ios ...
随机推荐
- oracle同义词是什么意思?
相当于alias,比如把user1.table1 在user2中建一个同义词table1create synonym table1 for user1.table1;这样当我们在user2中查sele ...
- Linux硬盘镜像获取与还原(dd、AccessData FTK Imager)
1.硬盘镜像获取工具:dd dd是Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 1.1 本地取数据 查看磁盘及分区 # fdisk - ...
- gcc 编译 + 选项【转】
转自:http://blog.csdn.net/princess9/article/details/6567678 一般来说要现有项目中的编译选项,设置新的project的编译选项 编译器 就是将“高 ...
- aarch64_a2
asterisk-sounds-core-en_GB-1.5.0-2.fc26.noarch.rpm 2017-02-14 08:24 26K fedora Mirroring Project ast ...
- ParameterizedType获取java泛型参数类型
ParameterizedType getClass().getGenericSuperclass() 返回表示此 Class 所表示的实体(类.接口.基本类型或 void)的直接超类的 Type,然 ...
- InnoDB锁问题
InnoDB锁问题 InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION):二是采用了行级锁.行级锁与表级锁本来就有许多不同之处,另外,事务的引入也带来了一些新问题.下面我 ...
- python进阶学习之高阶函数
高阶函数就是把函数当做参数传递的一种函数, 例如: 执行结果: 1.map()函数 map()接收一个函数 f 和一个list, 并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 l ...
- 关闭linux退格键和vi发出的嘟嘟声
以root用户登录,然后请安下面方法进行操作: 在命令行下执行:echo "rmmod pcspkr" >> /etc/rc.d/rc.local
- python图片处理(一)
在matlab中有相应的图像进行二值化处理,并且标记连通区域 L = bwlabel(BW,n) 返回一个和BW大小相同的L矩阵,包含了标记连BW中每个连通区域的类别标签,标签的值是1.2.num(连 ...
- javaweb作业一
作业:Http全称叫什么?有什么特点?端口号是多少?超文本传输协议:(1)遵循请求/响应模型(2)http协议是一种无状态协议,请求/响应完成后,连接会断开.这时,服务器无法知道当前访问的用户是否是老 ...