不知道为什么这么慢....

费用流,拆点....

--------------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#define rep( i, n ) for( int i = 0; i < n; ++i )
#define clr( x, c ) memset( x, c, sizeof( x ) )
#define Rep( i, n ) for( int i = 1; i <= n; ++i )
using namespace std;
const int maxn = 2000 + 5;
struct edge {
int to, cap, cost;
edge *next, *rev;
};
edge EDGE[ maxn << 3 ];
edge* pt;
edge* head[ maxn ];
void init() {
pt = EDGE;
clr( head, 0 );
}
inline void add( int u, int v, int d, int w ) {
pt -> to = v;
pt -> cap = d;
pt -> cost = w;
pt -> next = head[ u ];
head[ u ] = pt++;
}
inline void add_edge( int u, int v, int d, int w ) {
add( u, v, d, w );
add( v, u, 0, -w );
head[ u ] -> rev = head[ v ];
head[ v ] -> rev = head[ u ];
}
edge* p[ maxn ];
int d[ maxn ], a[ maxn ];
bool inQ[ maxn ];
const int INF = 0x3f3f3f3f;
int minCost( int S, int T ) {
int cost = 0;
for( ; ; ) {
clr( d, INF );
clr( inQ, 0 );
queue< int > Q;
d[ S ] = 0, a[ S ] = INF, Q.push( S );
while( ! Q.empty() ) {
int x = Q.front();
Q.pop();
inQ[ x ] = 0;
for( edge* e = head[ x ]; e; e = e->next )
   if( d[ e -> to ] > d[ x ] + e -> cost && e -> cap > 0 ) {
int to = e -> to;
d[ to ] = d[ x ] + e -> cost;
a[ to ] = min( a[ x ], e -> cap );
p[ to ] = e;
if( ! inQ[ to ] )
   Q.push( to ), inQ[ to ] = 1;
   }
}
if( d[ T ] == INF ) break;
cost += d[ T ] * a[ T ];
int x = T;
while( x != S ) {
p[ x ] -> cap -= a[ T ];
p[ x ] -> rev -> cap += a[ T ];
x = p[ x ] -> rev -> to;
}
}
return cost;
}
int main() {
    init();
    int n, a, b, f[ 3 ];
    cin >> n >> a >> b;
    rep( i, 3 ) cin >> f[ i ];
    int s = 0, t = n * 2 + 1;
    Rep( i, n ) {
int x;
scanf( "%d", &x );
add_edge( s, i, x, 0 );
add_edge( s, i + n, INF, f[ 0 ] );
add_edge( i + n, t, x, 0 );
    }
    Rep( i, n - 1 )
        add_edge( i, i + 1, INF, 0 );
    for( int i = 1; i + a + 1 <= n; i++ )
        add_edge( i, i + a + n + 1, INF, f[ 1 ]);
    for( int i = 1; i + b + 1 <= n; i++ )
        add_edge(i, i + b + n + 1, INF, f[ 2 ] );
    cout << minCost( s, t ) << "\n";
return 0;
}

--------------------------------------------------------------------------------

1221: [HNOI2001] 软件开发

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 820  Solved: 449
[Submit][Status][Discuss]

Description

某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员每天提供一块消毒毛巾,这种消毒毛巾使用一天后必须再做消毒处理后才能使用。消毒方式有两种,A种方式的消毒需要a天时间,B种方式的消毒需要b天(b>a),A种消毒方式的费用为每块毛巾fA, B种消毒方式的费用为每块毛巾fB,而买一块新毛巾的费用为f(新毛巾是已消毒的,当天可以使用);而且f>fA>fB。公司经理正在规划在这n天中,每天买多少块新毛巾、每天送多少块毛巾进行A种消毒和每天送多少块毛巾进行B种消毒。当然,公司经理希望费用最低。你的任务就是:为该软件公司计划每天买多少块毛巾、每天多少块毛巾进行A种消毒和多少毛巾进行B种消毒,使公司在这项n天的软件开发中,提供毛巾服务的总费用最低。

Input

第1行为n,a,b,f,fA,fB. 第2行为n1,n2,……,nn. (注:1≤f,fA,fB≤60,1≤n≤1000)

Output

最少费用

Sample Input

4 1 2 3 2 1
8 2 1 6

Sample Output

38

HINT

Source

最小费用最大流

转载于:https://www.cnblogs.com/JSZX11556/p/4524579.html

BZOJ 1221: [HNOI2001] 软件开发(最小费用最大流)相关推荐

  1. [BZOJ 1221][HNOI2001]软件开发(费用流)

    Description 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员 ...

  2. bzoj 1221: [HNOI2001] 软件开发

    最小费用最大流 /**************************************************************Problem: 1221User: lxy8584099 ...

  3. bzoj 1070: [SCOI2007]修车【最小费用最大流】

    一开始从客人角度想的,怎么建都不对 从一个修车工所接待的所有顾客花费的总时间来看,设一共有x个人,那么第一个修的对总时间的贡献是x*w1,第二个是(x-1)*w2-以此类推.所以把第i个修车工拆成n组 ...

  4. BZOJ 1061 志愿者招募(最小费用最大流)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1061 题意:申奥成功后,布布经过不懈努力,终于 成为奥组委下属公司人力资源部门的主管.布 ...

  5. BZOJ 1061: [Noi2008]志愿者招募 最小费用最大流

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

  6. vc6开发一个抓包软件_开发一个软件要多少钱?app软件开发的费用

    很多人咨询app开发相关的问题,大多数人最关心的就是:开发一个软件要多少钱?在本文中,我们将为大家分析这个经典问题:app软件开发的费用是多少? 对于行业中的任何人来说,这都是一个棘手的问题,即使你已 ...

  7. bzoj 1834: [ZJOI2010]network 网络扩容【最大流+最小费用最大流】

    第一问直接跑最大流即可.建图的时候按照费用流建,费用为0. 对于第二问,在第一问dinic剩下的残量网络上建图,对原图的每条边(i,j),建(i,j,inf,cij),表示可以用c的花费增广这条路.然 ...

  8. bzoj 2245 [SDOI2011]工作安排【最小费用最大流】

    其实不用拆点,对于每个人我们假装他是\( s[i]+1 \)个点,可以由他向T点分别连\( s[i]+1 \)条边,容量为\( t[i][j]-t[i][j-1]\),由S点向所有产品i连容量为c[i ...

  9. 有下界的最小费用可行流2.0(bzoj 3876: [Ahoi2014]支线剧情)

    什么是有下界的最小费用可行流? 平时来讲都是最小费用最大流,也就是在满流的前提条件下费用尽可能的少,而最小费用可行流一般不要求满流,但是每条边都有最小流量要求(比如经过边e(u,v)的流量不能少于4等 ...

最新文章

  1. Ubuntu伪分布式hadoop安装
  2. Stanford UFLDL教程 神经网络向量化
  3. Linux桌面环境介绍以及优缺点分析
  4. 信息安全系统设计基础第八周学习总结
  5. 也谈ASP.NET页面事件
  6. SuperBenchmarker一个用.NET编写的压测工具
  7. 用按钮控制歌单的上一曲和下一曲 0130 winform
  8. 2021年 CentOS 快速安装 最新版Nginx
  9. javascript在asp.net中运用
  10. Linux编程(11)_信号
  11. 有学问,还是牛逼啊!
  12. 快速修改本機局域網IP信息
  13. 数码相机闪光灯存储卡挑选篇
  14. 隐函数(组)存在定理
  15. 安装mathtype6.9时显示缺少MT Extra字体问题
  16. 一叶知秋,很多IT“专家”其实都只是“砖家”
  17. 淘宝聚划算怎么做?大神导航,一个神奇的网站从此开启大神之路
  18. javaGUl编程设计(大学生项目)
  19. 基于形状匹配的螺丝识别(完整代码)
  20. Cloudflare api 设置Firewall rules防止wodpress被爆力破解

热门文章

  1. Objective-C method及相关方法分析
  2. Eming cup Problem D. Game of numbers
  3. canvas绘制阴影
  4. SQL大圣之路笔记——SQL 创建索引 index
  5. Newtonsoft.Json(Json.Net)学习笔记
  6. 使用Jmeter开发app端接口自动化案例实战
  7. Linux环境用Sendmail架设Mail服务器
  8. 系统开发小结【未完待续】
  9. ORACLE 使用函数返回表数据
  10. java serialization/deserialization (序列化对象自描述)