BZOJ2039_employ人员雇佣_KEY
网络流,求最小割。
设tot为所有盈利的和,即所有人(不花钱)雇佣。
对于S->i建一条容量为c[i]的边,i->j建一条S[i][j]*2的边,之所以这样建是因为如果不选这个人还会亏S[i][j]。
对于i->T建一条容量为∑S[i][j]的边。
最小割=最大流,跑Dinic
code:
/**************************************************************
Problem: 2039
User: yekehe
Language: C++
Result: Accepted
Time:4428 ms
Memory:52316 kb
****************************************************************/ #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; int read()
{
char c;while(c=getchar(),c<''||c>'');
int x=c-'';while(c=getchar(),c>=''&&c<='')x=x*+c-'';
return x;
} int N,a[],MP[][];
int head[],nxt[],To[],W[],cnt; void add(int x,int y,int c)
{
To[cnt]=y,W[cnt]=c;
nxt[cnt]=head[x];
head[x]=cnt;
cnt++;
} int dist[],l[],h,t;
int BFS()
{
h=t=;
memset(dist,0xfff,sizeof dist);
l[++t]=,dist[]=;
while(h<t){
int front=l[++h];
for(int i=head[front];i!=-;i=nxt[i]){
if(dist[To[i]]==- && W[i]){
dist[To[i]]=dist[front]+;
l[++t]=To[i];
}
}
}
return dist[N+]!=-;
} int DFS(int x,int w)
{
if(x==N+ || !w)return w;
int res=;
for(int i=head[x];i!=-&&w;i=nxt[i]){
if(dist[x]+==dist[To[i]] && W[i]){
int DK=DFS(To[i],min(w,W[i]));
res+=DK;w-=DK;
W[i]-=DK,W[i^]+=DK;
}
}
if(!res)dist[x]=-;
return res;
} int tot=;
void Dinic()
{
int ans=;
while(BFS())
ans+=DFS(,2e9);
printf("%d",tot-ans);
return ;
} int main()
{
memset(head,-,sizeof head);
memset(nxt,-,sizeof nxt);
N=read();
register int i,j;
for(i=;i<=N;i++)
a[i]=read(),add(,i,a[i]),add(i,,);
for(i=;i<=N;i++)
for(j=;j<=N;j++)
MP[i][j]=read(),tot+=MP[i][j];
for(i=;i<=N;i++)
for(j=i+;j<=N;j++)
add(i,j,MP[i][j]<<),add(j,i,MP[i][j]<<);
for(i=;i<=N;i++){
int res=;for(j=;j<=N;j++)res+=MP[i][j];
add(i,N+,res),add(N+,i,);
}
Dinic();
return ;
}
BZOJ2039_employ人员雇佣_KEY的更多相关文章
- BZOJ 2039: [2009国家集训队]employ人员雇佣
2039: [2009国家集训队]employ人员雇佣 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 1369 Solved: 667[Submit ...
- BZOJ_2039_[2009国家集训队]employ人员雇佣_ 最小割
BZOJ_2039_[2009国家集训队]employ人员雇佣_ 最小割 Description 作为一个富有经营头脑的富翁,小L决定从本国最优秀的经理中雇佣一些来经营自己的公司.这些经理相互之间合作 ...
- 【BZOJ 2039】 2039: [2009国家集训队]employ人员雇佣 (最小割)
2039: [2009国家集训队]employ人员雇佣 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 1511 Solved: 728 Descri ...
- 【BZOJ2039】[2009国家集训队]employ人员雇佣 最小割
[BZOJ2039][2009国家集训队]employ人员雇佣 Description 作为一个富有经营头脑的富翁,小L决定从本国最优秀的经理中雇佣一些来经营自己的公司.这些经理相互之间合作有一个贡献 ...
- 【BZOJ2039】【2009国家集训队】人员雇佣 [最小割]
人员雇佣 Time Limit: 20 Sec Memory Limit: 259 MB[Submit][Status][Discuss] Description 作为一个富有经营头脑的富翁,小L决 ...
- BZOJ 2039 人员雇佣 二元关系 最小割
题面太长了,请各位自行品尝—>人员雇佣 分析: 借用题解的描述: a.选择每个人有一个代价Ai b.如果有两个人同时选择就可以获得收益Ei,j c.如果一个人选择另一个不选会产生代价Ei,j 这 ...
- BZOJ2039 [2009国家集训队]employ人员雇佣
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=2039 鉴于一开始看题如果不仔细是看不懂题目的,还是说一下题目大意 [题目大意]:给定n个人 ...
- 2039: [2009国家集训队]employ人员雇佣
任意门 Description 作为一个富有经营头脑的富翁,小L决定从本国最优秀的经理中雇佣一些来经营自己的公司.这些经理相互之间合作有一个贡献指数,(我们用Ei,j表示i经理对j经理的了解程度),即 ...
- BZOJ 2039 人员雇佣(最小割)
最小割的建图模式一般是,先算出总收益,然后再通过网络模型进行割边减去部分权值. 然后我们需要思考什么才能带来收益,什么才能有权值冲突. s连向选的点,t连向不选的点,那么收益的减少量应该就是将s集和t ...
随机推荐
- 常用算法的C++实现
常用算法的C++实现 // // DZAppDelegate.m // AlgorithmTest // // Created by dzpqzb on 13-8-4. // Copyright (c ...
- css计数器 及 鼠标经过从中间扩散一个矩形(正方形长方形均可)
<!DOCTYPE html> <html> <head> <title>css计数器--兼容IE8</title> <meta ch ...
- [19/04/20-星期六] Java的动态性_字节码操作(Javassist类库(jar包),assist:帮助、援助)
一.概念 [基本] /** * */ package cn.sxt.jvm; import javassist.ClassPool; import javassist.CtClass; import ...
- 【JavaScript】插件参数的写法
就是实现复制的一个过程 (function() { var Explode = function(container, params) { 'use strict'; var n = this; if ...
- 【Vue】hello world
参考链接:http://www.jianshu.com/p/5ba253651c3b 1.Vue 是一个前端框架,特点是数据绑定.组件化 如果你之前已经习惯了用jQuery操作DOM,学习Vue.js ...
- 1、Web Service-开始入坑(基础简介)
1.关于Schema 具体介绍:https://baike.baidu.com/item/Schema/15286221?fr=aladdin 几个重要的知识点: 2.HTTP协议 具体介绍看博文:h ...
- javascrict中innerhtml和innerText的关系
1.time.innerHTML 就是id为time的标签中所有包含的代码内容 比如 <div id='time'><a href='#'>time</a>< ...
- elk6.*版本搭建连接 比较好一点的
https://www.cnblogs.com/harvey2017/p/8922164.html
- ORACLE NLS_LENGTH_SEMANTICS 参数的用途
NLS_LENGTH_SEMANTICS参数是一个专为创建CHAR和VARCHAR2两种字符型的列时,指定使用的字节长度,还是使用字符长度的定义方式,有byte和char两种值,默认为byte. 当设 ...
- (转)Linux内核基数树应用分析
Linux内核基数树应用分析 ——lvyilong316 基数树(Radix tree)可看做是以二进制位串为关键字的trie树,是一种多叉树结构,同时又类似多层索引表,每个中间节点包含指向多个节点的 ...