_bzoj1061 [Noi2008]志愿者招募【最小费用最大流】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1061
尽管不是mcmf的裸题,但还是保存一下模版叭~
很好的一道建模的题,把变量间的加加减减等效成网络中的流入流量与流出流量,再带上个权,求个最小费用就好,详细题解间此:https://www.byvoid.com/blog/noi-2008-employee/
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- const int maxn = 1010, maxm = 10005, maxe = 100000;
- const long long inf = 0x3c3c3c3c3c3c3c3cLL;
- int n, m, a[maxn], s[maxm], t[maxm], cost[maxm], S, T;
- int head[maxn], to[maxe], next[maxe], from[maxe], lb;
- long long d[maxn], c[maxn], w[maxe], flow[maxe], cap[maxe];
- int p[maxn], que[maxn], head_, tail, h;
- bool inq[maxn];
- inline bool spfa(long long & co) {
- memset(d, 0x3c, sizeof d);
- head_ = tail = 0;
- memset(inq, 0, sizeof inq);
- que[tail++] = S;
- inq[S] = 1;
- c[S] = inf;
- d[S] = 0;
- while (head_ != tail) {
- h = que[head_++];
- inq[h] = 0;
- if (head_ == T + 3) {
- head_ = 0;
- }
- for (int j = head[h]; j != -1; j = next[j]) {
- if (cap[j] > flow[j] && d[to[j]] > d[h] + w[j]) {
- d[to[j]] = d[h] + w[j];
- c[to[j]] = std::min(c[h], cap[j] - flow[j]);
- p[to[j]] = j;
- if (!inq[to[j]]) {
- que[tail++] = to[j];
- inq[to[j]] = 1;
- if (tail == T + 3) {
- tail = 0;
- }
- }
- }
- }
- }
- if (d[T] == inf) {
- return false;
- }
- co += d[T] * c[T];
- for (int i = T; i != S; i = from[p[i]]) {
- flow[p[i]] += c[T];
- flow[p[i] ^ 1] -= c[T];
- }
- return true;
- }
- inline long long mcmf(void) {
- long long co = 0;
- while (spfa(co));
- return co;
- }
- inline void ist(int aa, int ss, long long ww, long long ca) {
- to[lb] = ss;
- from[lb] = aa;
- next[lb] = head[aa];
- head[aa] = lb;
- w[lb] = ww;
- cap[lb] = ca;
- ++lb;
- to[lb] = aa;
- from[lb] = ss;
- next[lb] = head[ss];
- head[ss] = lb;
- w[lb] = -ww;
- cap[lb] = 0;
- ++lb;
- }
- int main(void) {
- //freopen("in.txt", "r", stdin);
- memset(head, -1, sizeof head);
- memset(next, -1, sizeof next);
- scanf("%d%d", &n, &m);
- T = n + 2;
- for (int i = 1; i <= n; ++i) {
- scanf("%d", a + i);
- }
- for (int i = 1; i <= m; ++i) {
- scanf("%d%d%d", s + i, t + i, cost + i);
- }
- for (int i = 1; i <= n + 1; ++i) {
- if (a[i - 1] - a[i] >= 0) {
- ist(S, i, 0, (long long)(a[i - 1] - a[i]));
- }
- else {
- ist(i, T, 0, (long long)(a[i] - a[i - 1]));
- }
- }
- for (int i = 1; i <= m; ++i) {
- ist(t[i] + 1, s[i], (long long)cost[i], inf);
- }
- for (int i = 1; i <= n; ++i) {
- ist(i, i + 1, 0, inf);
- }
- printf("%lld\n", mcmf());
- return 0;
- }
_bzoj1061 [Noi2008]志愿者招募【最小费用最大流】的更多相关文章
- bzoj 1061 志愿者招募(最小费用最大流)
[Noi2008]志愿者招募 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 3792 Solved: 2314[Submit][Status][Di ...
- 【BZOJ】1061: [Noi2008]志愿者招募(费用流+数学)
http://www.lydsy.com/JudgeOnline/problem.php?id=1061 好神的一题! 学会了一种建模方式: 当方程组内的任意变量都在其中两个方程出现且一正一负,可以建 ...
- BZOJ 1061 [Noi2008]志愿者招募(费用流)
题目描述 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完成,其中第i ...
- NOI2008 志愿者招募 (费用流)
题面 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完成,其中第i 天至 ...
- [BZOJ1061][Noi2008]志愿者招募 线性规划+费用流
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1061 根据题意列方程,然后用网络流解线性规划. 题解直接贴ByVoid的吧,太神了:htt ...
- BZOJ-1061 志愿者招募 线性规划转最小费用最大流+数学模型 建模
本来一眼建模,以为傻逼题,然后发现自己傻逼...根本没想到神奇的数学模型..... 1061: [Noi2008]志愿者招募 Time Limit: 20 Sec Memory Limit: 162 ...
- BZOJ 1061: [Noi2008]志愿者招募 费用流
1061: [Noi2008]志愿者招募 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1061 Description 申奥成功后,布布 ...
- 【费用流】NOI2008志愿者招募
1061: [Noi2008]志愿者招募 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 5171 Solved: 3089[Submit][Stat ...
- BZOJ 1061 志愿者招募(最小费用最大流)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1061 题意:申奥成功后,布布经过不懈努力,终于 成为奥组委下属公司人力资源部门的主管.布 ...
随机推荐
- unity3d 摄像机抖动特效
摄像机抖动特效 在须要的地方调用CameraShake.Shake()方法就能够
- Tomcat-公布WEB应用
1.定义Context 进入管理WEB应用的URL是http://localhost:8080/manager/html. username与password的设置:打开tomcat安装文件夹中的co ...
- Cts框架解析(6)-任务的运行
前两篇讲了任务的加入和9大项配置,这篇讲任务的运行. 任务的运行 任务的运行在CommandScheduler的run方法中,所以删除全部的断点,在run方法中打上断点,重新启动启动debug: 先看 ...
- 网络知识: 物理层PHY 和 网络层MAC
PHY模块简介 物理层位于OSI最底层,物理层协议定义电气信号.线的状态.时钟要求.数据编码和数据传输用的连接器. 物理层的器件称为PHY. 上图里的灰色方框图里的就是PHY芯片内部模块图. MAC器 ...
- 记一次Tomcat无法正常启动的查错与解决之路
使用LombozEclipse运行某Web应用,结果总是404. 换另一个Eclipse运行,还是404. 换Tomcat到更高版本,还是404. 直接启动Tomcat,闪退. 用重定向拦截输出,可惜 ...
- java读取Excel表格中的数据
1.需求 用java代码读取hello.xls表格中的数据 2.hello.xls表格 3.java代码 package com.test; import java.io.File; import j ...
- Spring嵌套事务控制
A类 callBack_test() B类 testadd() C类 select(),得查询到B类testadd方法中新增的数据.以及初始化一些属性 场景:A类 嵌套 B类 B类嵌套C ...
- 【leetcode】Word Break(python)
思路是这种.我们从第一个字符開始向后依次找,直到找到一个断句的地方,使得当前获得的子串在dict中,若找到最后都没找到.那么就是False了. 在找到第一个后,接下来找下一个断句处,当然是从第一个断句 ...
- asp.net编码解码的两篇文章
http://www.cnblogs.com/freshman0216/p/4165949.html http://www.cnblogs.com/freshman0216/p/4172655.htm ...
- 识别jar的编译JDK版本
解压jar,获取xxx.calss文件 dos命令行javap -verbose classname import java.io.InputStream; import java.io.PrintW ...