2039: [2009国家集训队]employ人员雇佣

Time Limit: 20 Sec  Memory Limit: 259 MB
Submit: 1614  Solved: 789
[Submit][Status][Discuss]

Description

作为一个富有经营头脑的富翁,小L决定从本国最优秀的经理中雇佣一些来经营自己的公司。这些经理相互之间合作有一个贡献指数,(我们用Ei,j表示i经理对j经理的了解程度),即当经理i和经理j同时被雇佣时,经理i会对经理j做出贡献,使得所赚得的利润增加Ei,j。当然,雇佣每一个经理都需要花费一定的金钱Ai,对于一些经理可能他做出的贡献不值得他的花费,那么作为一个聪明的人,小L当然不会雇佣他。 然而,那些没有被雇佣的人会被竞争对手所雇佣,这个时候那些人会对你雇佣的经理的工作造成影响,使得所赚得的利润减少Ei,j(注意:这里的Ei,j与上面的Ei,j 是同一个)。 作为一个效率优先的人,小L想雇佣一些人使得净利润最大。你可以帮助小L解决这个问题吗?

Input

第一行有一个整数N<=1000表示经理的个数 第二行有N个整数Ai表示雇佣每个经理需要花费的金钱 接下来的N行中一行包含N个数,表示Ei,j,即经理i对经理j的了解程度。(输入满足Ei,j=Ej,i)

Output

第一行包含一个整数,即所求出的最大值。

Sample Input

3
3 5 100
0 6 1
6 0 2
1 2 0

Sample Output

1
【数据规模和约定】
20%的数据中N<=10
50%的数据中N<=100
100%的数据中 N<=1000, Ei,j<=maxlongint, Ai<=maxlongint

最小割心得:
首先需要一定的功底来发现这道题是最小割,并且投入思考。
然后想怎么建图:
最小割都是先算上所有收益,然后再通过网络图进行割边减去部分权值。
收益有时候可能带上负值。
然后我们需要思考什么能带来权值,什么会有权值冲突。
而最小割图一般都是拆成S集和T集考虑,即取与不取,某人/点选A或者选B等等,
这样就会带来冲突,也就是需要割的边。
然后我们需要把所有权值的得与失列出来,针对性建图,然后check几种情况:
比如两个人都在S集、都在T集,甲S乙T,甲T乙S等等,我们看这样会割掉哪些边,失去哪些权值。
如果发现建错了,也可以有针对性地进行修改。

提供一个较有普及型的最小割建图方法

回到这一道题

把自己和敌对公司看成机器A、B,把问题转换为最小花费

即可用最小割解决

那么不选一个点

就代表花费矩中的一行

选一个点就代表花费雇佣该经理的花费

在两个经理之间连E(i,j)<<1的边

代表两经理不在同一公司的增加花费

(<<1是因为两个经理不在同一公司会消耗E(i,j)两次,题意问题)

跑一遍最大流就OK啦

不知道为什么BJ的代码跑的如此之慢QWQ

转载分别来自 (当然 题解部分是BJ自己完成的)

http://blog.csdn.NET/vmurder/article/details/42651751

http://www.cnblogs.com/chenyushuo/p/5146626.html

#include<cmath>
#include<ctime>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<complex>
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<vector>
#include<string>
#include<bitset>
#include<queue>
#include<map>
#include<set>
using namespace std;
inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch<='9'&&ch>='0'){x=10*x+ch-'0';ch=getchar();}return x*f;
}
inline void print(int x)
{if(x<0)putchar('-'),x=-x;if(x>=10)print(x/10);putchar(x%10+'0');}const int N=1010,M=3001000,inf=0X3f3f3f3f;int ecnt=1,last[N];
struct EDGE{int to,nt,val;}e[M];
inline void readd(int u,int v,int val){e[++ecnt]=(EDGE){v,last[u],val};last[u]=ecnt;}
inline void add(int u,int v,int val){readd(u,v,val);readd(v,u,0);}int n,S,T=N-1;int q[N],d[N];
bool bfs()
{memset(d,0,sizeof(d));d[0]=1;int head=0,tail=1;q[0]=0;while(head<tail){int u=q[head++];head%=N;for(int i=last[u];i;i=e[i].nt)if(e[i].val&&!d[e[i].to]){d[e[i].to]=d[u]+1;q[tail++]=e[i].to;tail%=N;}}return d[T];
}int dfs(int u,int lim)
{if(u==T||!lim)return lim;int res=0;for(int i=last[u];i;i=e[i].nt)if(e[i].val&&d[e[i].to]==d[u]+1){int tmp=dfs(e[i].to,min(lim,e[i].val));lim-=tmp;e[i].val-=tmp;e[i^1].val+=tmp;res+=tmp;if(!lim)break;}if(!res)d[u]=-1;return res;
}int ans;
void dinic(){while(bfs())ans+=dfs(S,inf);}int main()
{n=read();int sum=0;for(int i=1,x;i<=n;++i){x=read();add(i,T,x);}for(int i=1,tmp;i<=n;++i){tmp=0;for(int j=1,x;j<=n;++j){x=read();tmp+=x;if(i!=j)add(i,j,x<<1);}sum+=tmp;add(S,i,tmp);}dinic();print(sum-ans);return 0;
}
/*
3
3 5 100
0 6 1
6 0 2
1 2 01
*/

转载分别来自

http://blog.csdn.NET/vmurder/article/details/42651751

http://www.cnblogs.com/chenyushuo/p/5146626.html

BZOJ 2039: [2009国家集训队]employ人员雇佣 最小割 二元组建图模型相关推荐

  1. BZOJ 2039: [2009国家集训队]employ人员雇佣

    二次联通门 : BZOJ 2039: [2009国家集训队]employ人员雇佣 /*BZOJ 2039: [2009国家集训队]employ人员雇佣最小割先全部雇佣每个人向汇点连边后源点分别向i,j ...

  2. bzoj2039[2009国家集训队]employ人员雇佣

    bzoj2039[2009国家集训队]employ人员雇佣 题意: 有N个经理,Ei,j表示i经理对j经理的了解程度,当经理i和经理j同时被雇佣时,利润增加Ei,j*2.同时,雇佣每一个经理都需要花费 ...

  3. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 9894  Solved: 4561 [Su ...

  4. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 分块

    分块大法好 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 2938  Solved: 13 ...

  5. 莫队(bzoj 2038: [2009国家集训队]小Z的袜子(hose))

    莫队也是暴力的一种,不过可以很有效的降低复杂度 如果我们已知[l, r]的答案,能在O(1)时间得到[l+1,r]的答案以及[l, r-1]的答案,即可使用莫队算法. 时间复杂度为O(n^1.5).如 ...

  6. BZOJ 2039 人员雇佣 (最小割)

    题面:BZOJ传送门 网络流的题真神仙= = 大致分为三种情况 选某个人$i$,收益减少$a_{i}$ 选了$i$选了$j$,收益增加$2e_{ij}$ 选了$i$不选$j$,收益减少$e_{ij}$ ...

  7. [BZOJ 2038][2009国家集训队]小Z的袜子(hose)(莫队)

    Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只 ...

  8. bzoj - 2038: [2009国家集训队]小Z的袜子(hose)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 莫队算法可以解决一类不修改.离线查询问题.而这题可以用莫队来做. *我是看这个论文学 ...

  9. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)

    题目描述 与 小B的询问 类似 对于一段区间[l,r],任选两个数构成排列的方案数A(r-l+1,2)=(r-l+1)*(r-l) 设num[i]为i在区间[l,r]内重复的次数,那么选出的两个数都是 ...

最新文章

  1. cnblogs和org2blog使用总结
  2. ECMAScript5之Object学习笔记(二)
  3. VS2012 编译 boost1.53/ boost1.49
  4. QT给文本添加链接事件
  5. Java Web学习总结(19)——web.xml配置详解
  6. css-modules,可视化介绍CSS Modules是什么?
  7. 管家婆显示服务器没有加密狗,管家婆软件阿拉丁狗找不到加密狗
  8. 下载站mime属性设置(让文件可下载)
  9. 程序员最爱字体_网页设计师最爱的十大字体
  10. Win7 XP双系统安装
  11. Android应用切换皮肤功能实现
  12. java 将多个文件打包成压缩包下载
  13. cad断点快捷键_史上最好的CAD常用快捷键及使用方法集
  14. eclipse neon Java编辑器页面字体更改
  15. html字体库otf文件使用,在webpack中加载.otf字体文件的正确方法是什么?
  16. 目标端的trail文件损坏或误删除,如何重新进行抽取
  17. 腾讯ai开放平台(智能闲聊)sdk----- python3.X
  18. A10+Android4.0 音频驱动
  19. 有什么方法可以查看网站使用的是那个wordpress主题
  20. 开源OA系统门户:企业信息互通,集成办公

热门文章

  1. 基于MATLAB去理解掌握傅里叶级数和傅里叶变换
  2. 市场调研报告-全球与中国AI加速器的渗透和路线市场现状及未来发展趋势
  3. android欢迎页广告
  4. vs c语言打印心形情书,最美C语言情书(输出心形图案).doc
  5. MySQL 零散知识整理~字符编码设置
  6. CUDA下的GPU编程入门--第一个CUDA程序
  7. Ubuntu 12.04 Eclipse 3.7 紧凑布局样式美化
  8. 鲜枣课堂-文章分类目录(2019.7.28更新)
  9. Easycwmp_源码分析
  10. python实现微信自动回复机器人+查看别人撤回的消息(部署到云服务器)