[BZOJ1061] [Noi2008] 志愿者招募 (费用流)
Description
Input
Output
仅包含一个整数,表示你所设计的最优方案的总费用。
Sample Input
2 3 4
1 2 2
2 3 5
3 3 2
Sample Output
HINT
1 ≤ N ≤ 1000,1 ≤ M ≤ 10000,题目中其他所涉及的数据均 不超过2^31-1。
Source
Solution
设第$i$种志愿者的人数为$x_{i}$,那么我们有不等式:(以样例说明)
$x_{1}\geq2$
$x_{1}+x_{2}\geq3$
$x_{2}+x_{3}\geq4$
目标为最小化$z=2x_{1}+5x_{2}+2x_{3}$
欸这不是线性规划么,麻麻我不会单纯形
好吧我们用费用流做:
假设我们原来有$INF$个志愿者,然后每一天都会少几个志愿者,需要花钱招募。现要求每一天都有$INF$个志愿者。
然后就按改变后的题意建图:
源点向第一个点连$(INF,0)$的边,之后每一个点向后一个点连$(INF-P[i],0)$的边,第$m+1$个点作为汇点
之后对于每一个志愿者,我们从点$S[i]$到点$T[i]+1$连$(INF,C[i])$的边。
此时最大流必为$INF$,最小费用即为所求答案。
zkw费用流是什么。。。据说费用流不会卡EK算法
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF = 1e18;
struct edge
{
int u, v, nxt;
ll w, c;
}e[];
queue<int> Q;
int n, etot = , fst[], fa[];
bool inq[];
ll ans, dis[]; void addedge(int u, int v, ll w, ll c)
{
e[++etot] = (edge){u, v, fst[u], w, c}, fst[u] = etot;
e[++etot] = (edge){v, u, fst[v], , -c}, fst[v] = etot;
} bool SPFA()
{
int u;
memset(dis, , sizeof(dis));
dis[n + ] = , Q.push(n + ), inq[n + ] = true;
while(!Q.empty())
{
u = Q.front(), Q.pop();
for(int i = fst[u]; i; i = e[i].nxt)
if(e[i].w && dis[e[i].v] > dis[u] + e[i].c)
{
dis[e[i].v] = dis[u] + e[i].c;
fa[e[i].v] = i;
if(!inq[e[i].v])
Q.push(e[i].v), inq[e[i].v] = true;
}
inq[u] = false;
}
if(dis[n + ] >= INF) return false;
return true;
} void Edmond_Karp()
{
ll w = INF;
for(int i = fa[n + ]; i; i = fa[e[i].u])
w = min(w, e[i].w);
for(int i = fa[n + ]; i; i = fa[e[i].u])
e[i].w -= w, e[i ^ ].w += w, ans += e[i].c * w;
} int main()
{
int m, u, v;
ll w;
cin >> n >> m;
addedge(n + , , INF, );
for(int i = ; i <= n; ++i)
{
cin >> w;
addedge(i, i + , INF - w, );
}
for(int i = ; i <= m; ++i)
{
cin >> u >> v >> w;
addedge(u, v + , INF, w);
}
while(SPFA())
Edmond_Karp();
cout << ans << endl;
return ;
}
[BZOJ1061] [Noi2008] 志愿者招募 (费用流)的更多相关文章
- BZOJ 1061: [Noi2008]志愿者招募 费用流
1061: [Noi2008]志愿者招募 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1061 Description 申奥成功后,布布 ...
- P3980 [NOI2008]志愿者招募 费用流 (人有多大胆地有多大产
https://www.luogu.org/problemnew/show/P3980 感觉费用流比网络流的图更难想到,要更大胆.首先由于日期是连续的,所以图中的点是横向排列的. 这道题有点绕道走的意 ...
- [NOI2008]志愿者招募 (费用流)
大意: $n$天, 第$i$天要$a_i$个志愿者. $m$种志愿者, 每种无限多, 第$i$种工作时间$[s_i,t_i]$花费$c_i$, 求最少花费. 源点$S$连第一天, 容量$INF$ 第$ ...
- P3980 [NOI2008]志愿者招募 (费用流)
题意:最多1000天 每天需要至少ai个工人施工 有10000种工人可以雇佣 每种工人可以工作si到ti天 雇佣一个的花费是ci 问怎样安排使得施工花费最少 思考:最直白的建模方式 就是每种工人可以和 ...
- Vijos1825 NOI2008 志愿者招募 费用流
Orz ByVoid大神的题解:https://www.byvoid.com/blog/noi-2008-employee/ 学习网络流建图的好题,不难想到线性规划的模型,不过利用模型的特殊性,结合网 ...
- [BZOJ1061][Noi2008]志愿者招募
[BZOJ1061][Noi2008]志愿者招募 试题描述 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难 题:为即将启动的奥运新项目招募一批短期志愿 ...
- 网络流解线性规划问题 BZOJ1061: [Noi2008]志愿者招募
线性规划定义: 在给定有限的资源和竞争约束情况下,很多问题都可以表述为最大化或最小化某个目标.如果可以把目标指定为某些变量的线性函数,而且如果可以将资源约束指定为这些变量的等式或不等式,则得到了一个线 ...
- 从多种角度看[BZOJ 1061] [NOI 2008]志愿者招募(费用流)
从多种角度看[BZOJ 1061] [NOI 2008]志愿者招募(费用流) 题面 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运 ...
- 【费用流】BZOJ1061: [Noi2008]志愿者招募(这题超好)
1061: [Noi2008]志愿者招募 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 5291 Solved: 3173[Submit][Stat ...
随机推荐
- JavaScript使用点滴
JavaScript使用点滴 一.字符串替换的小插曲 遇到一个小插曲,想要把后台返回的字符串输出给前端视图,字符串中包含\n换行,需要使用javascript对其进行替换成<br />. ...
- mac下更新自带的PHP版本到5.6
OS X 10.11自带的PHP版本是PHP 5.5.x,如果我们想更新PHP的版本到5.6或者是7.0该怎么办呢? 下载和安装PHP 5.6 打开终端并且运行如下命令: curl -s http:/ ...
- Linux下LNMP启动不了的问题总结(2015.05)
[1] *****@*****-VirtualBox:~$ sudo /etc/init.d/mysql.server start Starting MySQL * Couldn't find MyS ...
- MyEclipse出现红色感叹号解决办法
今天在做数据库连接练习的时候自己创建的工程突然出现了一个红色的感叹号,然后运行自己写的代码的时候出现找不到主类的错误!!! 我还以为是自己不小心写错了,然后让编译器自动生成代码也出现了一样的问题... ...
- C/C++语言简介之优缺点
一.优点1.简洁紧凑.灵活方便 C语言一共只有32个关键字,9种控制语句,程序书写形式自由,区分大小写.把高级语言的基本结构和语句与低级语言的实用性结合起来.C 语言可以像汇编语言一样对位.字节和地址 ...
- SpringBoot 中常用注解
本篇博文将介绍几种SpringBoot 中常用注解 其中,各注解的作用为: @PathVaribale 获取url中的数据 @RequestParam 获取请求参数的值 @GetMapping 组合注 ...
- UVA - 12333 字典树+大数
思路:用字典树将前40个数字记录下来,模拟大数加法即可. AC代码 #include <cstdio> #include <cmath> #include <algori ...
- 从零开始学习前端JAVASCRIPT — 14、闭包与继承
一.闭包 1 . 概念:闭包就是能够读取其他函数内部变量的函数.在JS中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解为”定义在一个函数内部的函数”. 2 . 闭包的特点 1)可以读取 ...
- Jetty添加Filter过滤器
1.Jetty嵌入到Spring项目 try { Server server = new Server(8080); WebAppContext context = new WebAppContext ...
- HttpURLConnection 411错误解决
1.问题描述 Java HttpURLConnection类发送Http请求链接外网返回ResponseCode为411,对方为.NET服务器,网上查明原因可能来自以下: 1.可能是没有传http中的 ...