这道题教会我们一个道理靠谁也不如靠自己。

  当时学长已经讲了,然而一脸懵逼,好吧,上网搜题解,二脸懵逼,于是自己动手,丰衣足食。自己推!

  首先就是建模了,这道题谁与谁之间建模已经十分明了,超级源点,超级汇点没跑,重点在权值,首先,依照题意,是“舍弃”,因此基本确认为最小割,那么最小割从哪里割,就是我们每个人都雇佣所赚的钱(由样例可知,实际上是2倍所赚的钱,以下省略“*2”,简称合作金),但先不必算雇佣金,在一开始先只考虑赚钱,那么先说最简单的,两个人都雇佣,那么我们所赚的钱为两人合作金-雇佣两人所花的钱,那么我们割掉的边的流量就应当是雇佣金了,于是乎,连向终点的流量get,即为雇佣金。

  于是我们happy的继续推,如果这两个人我都不雇佣,那么我损失的就是雇佣他俩所赚的钱了,而我割的边的流量就是合作金,因为两人均摊,因此不必*2。

  最后,也就是个人认为比较复杂的就是一个雇佣一个不雇佣的情况,那么比起两人一起合作所产生的合作金我少的就是两倍合作金+敌对公司让我减少的一倍合作金+我所雇佣的那个人的雇佣金,由之前我们可知我割掉雇佣的那个人与汇点的时候已减少雇佣金,我割掉不雇佣的人与源点的时候以减去一倍合作金,于是乎,剩下的就是两倍合作金了,这就是两人之间的流量,记得开双向哈。

  总的来说就是这样,由简到难,由已知边的流量去推未知边的流量,找准总值为关键,实在不行就列个方程,怎样也能搞出来。

 

 #include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cmath>
using namespace std;
int n,s,zz=,t;
long long co[],a[];
struct ro{
int to,from;
int next;
long long l;
}road[];
void build(int x,int y,long long z){
zz++;
road[zz].l=z;
road[zz].to=y;
road[zz].from=x;
road[zz].next=a[x];
a[x]=zz;
zz++;
road[zz].to=x;
road[zz].from=y;
road[zz].next=a[y];
road[zz].l=;
a[y]=zz;
}
long long sum[];
long long deep[],cur[],cur2[];
bool bfs(){
memset(deep,,sizeof(deep));
queue<int> q1;
q1.push(s);
deep[s]=;
while(!q1.empty())
{
int x=q1.front();
q1.pop();
for(int i=a[x];i>;i=road[i].next)
{
int y=road[i].to;
if(road[i].l>&&(!deep[y]))
{
deep[y]=deep[x]+;
q1.push(y);
}
}
}
if(!deep[t])return ;
return ;
}
long long dfs(int x,long long sum){
if(x==t||!sum) return sum;
for(int i=cur[x];i>;i=road[i].next)
{
cur[x]=i;
int y=road[i].to;
if(road[i].l>&&deep[y]==deep[x]+)
{
int k=dfs(y,min(sum,road[i].l));
if(k)
{
road[i].l-=k;
road[i^].l+=k;
return k;
}
}
}
return ;
}
long long work(){
long long ans=;
memcpy(cur2,a,sizeof(a));
while(bfs())
{
int x;
memcpy(cur,cur2,sizeof(cur2));
while(x=dfs(s,0x7fffffff))
{
ans+=x;
}
}
return ans;
}
long long summ;
int main(){
scanf("%d",&n);
t=n+;
for(int i=;i<=n;i++)
{
scanf("%lld",&co[i]);
}
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
long long x;
scanf("%lld",&x);
if(x)build(i,j,x*);
sum[i]+=x;
}
}
for(int i=;i<=n;i++)
{
build(s,i,sum[i]);
build(i,t,co[i]);
summ+=sum[i];
}
printf("%lld\n",summ-work());
//while(1);
return ;
}

BZOJ 2039人员雇佣的更多相关文章

  1. BZOJ 2039 人员雇佣 二元关系 最小割

    题面太长了,请各位自行品尝—>人员雇佣 分析: 借用题解的描述: a.选择每个人有一个代价Ai b.如果有两个人同时选择就可以获得收益Ei,j c.如果一个人选择另一个不选会产生代价Ei,j 这 ...

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

    最小割的建图模式一般是,先算出总收益,然后再通过网络模型进行割边减去部分权值. 然后我们需要思考什么才能带来收益,什么才能有权值冲突. s连向选的点,t连向不选的点,那么收益的减少量应该就是将s集和t ...

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

    2039: [2009国家集训队]employ人员雇佣 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 1369  Solved: 667[Submit ...

  4. 【BZOJ 2039】 2039: [2009国家集训队]employ人员雇佣 (最小割)

    2039: [2009国家集训队]employ人员雇佣 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 1511  Solved: 728 Descri ...

  5. BZOJ 2039 [2009国家集训队]employ人员雇佣 网络流

    链接 BZOJ 2039 题解 这题建图好神,自己瞎搞了半天,最后不得不求教了企鹅学长的博客,,,,发现建图太神了!! s向每个人连sum(e[i][x]) 的边,每个人向T连a[i]的边.两两人之间 ...

  6. BZOJ_2039_[2009国家集训队]employ人员雇佣_ 最小割

    BZOJ_2039_[2009国家集训队]employ人员雇佣_ 最小割 Description 作为一个富有经营头脑的富翁,小L决定从本国最优秀的经理中雇佣一些来经营自己的公司.这些经理相互之间合作 ...

  7. 【BZOJ2039】[2009国家集训队]employ人员雇佣 最小割

    [BZOJ2039][2009国家集训队]employ人员雇佣 Description 作为一个富有经营头脑的富翁,小L决定从本国最优秀的经理中雇佣一些来经营自己的公司.这些经理相互之间合作有一个贡献 ...

  8. 【BZOJ2039】【2009国家集训队】人员雇佣 [最小割]

    人员雇佣 Time Limit: 20 Sec  Memory Limit: 259 MB[Submit][Status][Discuss] Description 作为一个富有经营头脑的富翁,小L决 ...

  9. BZOJ 2039:[2009国家集训队]employ人员雇佣(最小割)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2039 题意:中文题意. 思路:一开始想着和之前做的最大权闭合图有点像,但是如果把边全部当成点的话,那 ...

随机推荐

  1. JS引用路劲为什么在前面加上两个斜杠

    原文:JS引用路劲为什么在前面加上两个斜杠 //表示同协议,一般现在用在https跨域名地址情况下.比如第三方统计代码的引入,用//就不用很麻烦地区分https还是http,也不用担心https下降到 ...

  2. 创建hexo风格的markdown页面

    最近在用 nodejs 搭建一个个人博客,博客当然要有编辑文章的功能啦.个人比较偏爱 hexo 风格的 markdown 格式,所以想自己的博客也是这样的风格.尝试了几个库,发现 marked 的转换 ...

  3. epplus输出成thml

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  4. Android 动画基础——视图动画(View Animation)

    本篇讲android 3.0之前被广泛的动画框架——ViewAnimation. 目录 我将分为六部分来讲: 概述 Alpha透明动画 Rotate旋转动画 Translate位移动画 Scale放缩 ...

  5. 毕设(二)C#SerialPort

    毕业设计中,用到串口与无人机通信,所以就用到了SerialPort这个类,这个类在设置属性时, 用到最主要的属性应该是COM口和波特率,由于本人不熟悉硬件,不便多说,但经验告诉我是这样的, 还有数据位 ...

  6. 智能合约开发——以太坊 DApp 实现 购买通证token

    合约的buy()方法用于提供购买股票的接口.注意关键字payable,有了它买股票的人才可以付钱给你. 接收钱没有比这个再简单的了! function buy() payable public ret ...

  7. Windows XP 每次开机都自动检测硬盘 解决办法(可以用HDDRegenerate修复坏道)

    Windows XP,每次开机都自动检测硬盘,之前正常关机,没有任何非法操作.Windows XP,每次开机都自动检测硬盘,之前正常关机,没有任何非法操作. 1.和硬盘的分区格式有关,FAT32格式在 ...

  8. java.lang.ClassNotFoundException: org.hibernate.ejb.HibernatePersistence 解决方法

    编译遇到错误,如下: May 11, 2017 1:49:42 PM org.springframework.web.context.ContextLoader initWebApplicationC ...

  9. hadoop之hive&hbase互操作

    大家都知道,hive的SQL操作非常方便,但是查询过程中需要启动MapReduce,无法做到实时响应. hbase是hadoop家族中的分布式数据库,与传统关系数据库不同,它底层采用列存储格式,扩展性 ...

  10. OpenProj打开不了或者提示”Failed to load Java VM Library”的错误的解决方案

    一.双击打开OpenProj.exe没反应的解决方案: 1) 修改OpenProj1.4.0.ini,将Maximum Version=any改为Maximum Version=1.7,保存. 2)这 ...