题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1061

根据题意列方程,然后用网络流解线性规划。

题解直接贴ByVoid的吧,太神了:https://www.byvoid.com/blog/noi-2008-employee/

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int INF=<<;
int inline readint(){
int Num;char ch;
while((ch=getchar())<''||ch>'');Num=ch-'';
while((ch=getchar())>=''&&ch<='') Num=Num*+ch-'';
return Num;
}
int n,m;
int A[];
int S,T;
int to[],ne[],w[],c[],fir[],cnt=;
void add(int a,int b,int x,int y=INF){
to[cnt]=b,w[cnt]=x,c[cnt]=y,ne[cnt]=fir[a],fir[a]=cnt++;
to[cnt]=a,w[cnt]=-x,c[cnt]=,ne[cnt]=fir[b],fir[b]=cnt++;
}
int dis[],pre[];
bool in[];
queue <int> q;
bool Spfa(){
memset(dis,/,sizeof(dis));
q.push(S);
in[S]=true;
dis[S]=;
int u;
while(!q.empty()){
u=q.front();
q.pop();
in[u]=false;
for(int i=fir[u];i!=-;i=ne[i]){
int v=to[i];
if(dis[v]>dis[u]+w[i]&&c[i]){
dis[v]=dis[u]+w[i];
pre[v]=i;
if(!in[v]){
q.push(v);
in[v]=true;
}
}
}
}
return dis[T]!=dis[];
}
void Mcmf(){
int cost=;
pre[S]=-;
while(Spfa()){
int f=INF;
for(int i=pre[T];i!=-;i=pre[to[i^]]) f=min(f,c[i]);
for(int i=pre[T];i!=-;i=pre[to[i^]]){
c[i]-=f;
c[i^]+=f;
}
cost+=dis[T]*f;
}
printf("%d\n",cost);
}
int main(){
n=readint();
m=readint();
for(int i=;i<=n;i++) A[i]=readint();
memset(fir,-,sizeof(fir));
S=n+;
T=n+;
for(int i=;i<=n+;i++){
if(A[i]>=A[i-]) add(S,i,,A[i]-A[i-]);
else add(i,T,,A[i-]-A[i]);
if(i>) add(i,i-,);
}
for(int i=;i<=m;i++){
int a=readint(),
b=readint(),
c=readint();
add(a,b+,c);
}
Mcmf();
return ;
}

[BZOJ1061][Noi2008]志愿者招募 线性规划+费用流的更多相关文章

  1. 【BZOJ】1061: [Noi2008]志愿者招募(费用流+数学)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1061 好神的一题! 学会了一种建模方式: 当方程组内的任意变量都在其中两个方程出现且一正一负,可以建 ...

  2. BZOJ1061 NOI2008 志愿者招募 线性规划、费用流

    传送门 一道思路很妙的线性规划网络流 设\(X_i\)表示第\(i\)天需要的人数,\(P_i\)表示第\(i\)种人雇佣的个数 那么我们可以列出一系列式子 比如说样例就可以列出三个式子: \(P_1 ...

  3. BZOJ 1061 [Noi2008]志愿者招募(费用流)

    题目描述 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完成,其中第i ...

  4. BZOJ1061: [Noi2008]志愿者招募(线性规划)

    Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 5725  Solved: 3437[Submit][Status][Discuss] Descript ...

  5. NOI2008 志愿者招募 (费用流)

    题面 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完成,其中第i 天至 ...

  6. 网络流解线性规划问题 BZOJ1061: [Noi2008]志愿者招募

    线性规划定义: 在给定有限的资源和竞争约束情况下,很多问题都可以表述为最大化或最小化某个目标.如果可以把目标指定为某些变量的线性函数,而且如果可以将资源约束指定为这些变量的等式或不等式,则得到了一个线 ...

  7. [BZOJ1061][Noi2008]志愿者招募

    [BZOJ1061][Noi2008]志愿者招募 试题描述 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难 题:为即将启动的奥运新项目招募一批短期志愿 ...

  8. 线性规划费用流解法(Bzoj1061: [Noi2008]志愿者招募)

    题面 传送门 Sol 线性规划费用流解法用与求解未知数为非负数的问题 这道题可以列出一堆形如 \(x[i]+x[j]+x[k]+...>=a[p]\) 的不等式 我们强行给每个式子减去一个东西, ...

  9. 【费用流】BZOJ1061: [Noi2008]志愿者招募(这题超好)

    1061: [Noi2008]志愿者招募 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 5291  Solved: 3173[Submit][Stat ...

随机推荐

  1. Sublime Text 3.3143最新注册码

    Sublime Text3之前用的是老版本,昨天手贱点了更新,就要重新激活,网上找了好多都是之前版本的,以下给干货 —– BEGIN LICENSE —– TwitterInc User Licens ...

  2. Elasticsearch - 搜索类型与搜索位置

    一.搜索类型: Elasticsearch同意用户选择其所希望的处理查询的方式. 由于存在一些不同的情形,对其使用不同的搜索类型才是合适的.为了控制查询的运行方式,我们能够在请求中使用search_t ...

  3. Ubuntu grub2的启动配置文件grub.cfg,为了修改另人生厌的时间

    文章转自http://hi.baidu.com/detax/blog/item/90f18b54a8ef5253d00906e4.html 升级到Ubuntu 9.10后,就要接触grub2了,它和以 ...

  4. HDU2389 Rain on your Parade —— 二分图最大匹配 HK算法

    题目链接:https://vjudge.net/problem/HDU-2389 Rain on your Parade Time Limit: 6000/3000 MS (Java/Others)  ...

  5. Webdriver中关于driver.navigate().to()和driver.get()使用的区别

    先是有一个父页上button弹开一个子页,总共有4个子页,必须前一个页上的必填信息录完,才能在这个页面触发下一个子页. 用driver.navigate().to(baseUrl2),直接跳转到第2个 ...

  6. [Codeforces 545E] Paths and Trees

    [题目链接] https://codeforces.com/contest/545/problem/E [算法] 首先求 u 到所有结点的最短路 记录每个节点最短路径上的最后一条边         答 ...

  7. 【转】zip() 函数

    描述 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符 ...

  8. Overview of MIDI

    东拼西凑的介绍 MIDI which means Musical Instrument Digital Interface, introduced in 1980's provided a inter ...

  9. Html.PartialView(),html.Renderpartial,html.action.html.RenderAction 辅助方法

    Html.Partial(), 返回HTML字符串 .参数为部分视图 html.RenderPartial(),不返回返回HTML字符串 ,直接输出响应流.参数为部分视图 一般用于主视图中已经存在了这 ...

  10. Ajax 异步查询 ,刷新页面的一部分

    调用的过程是,通过Jquery注册单击事件,当单击分部视图中的按钮,就取得分部视图中文本框的值,然后调用$.Get()函数以Get形式调用控制器SearchPeople方法,参数为searchText ...