zoukankan      html  css  js  c++  java
  • BZOJ2424 [HAOI2010]订货

    题解

    (非常裸的费用流

    题意有一点表明不清: 该月卖出的商品可以不用算进仓库里面。

    然后套上费用流模板

    代码

     1 #include<cstring>
     2 #include<queue>
     3 #include<cstdio>
     4 #include<algorithm>
     5 #define rd read()
     6 #define rep(i,a,b) for(int i = (a); i <= (b); ++i)
     7 using namespace std;
     8  
     9 const int N = 1e4;
    10 const int inf = 1061109567;
    11  
    12 int n, m, maxin;
    13 int nd[N], cost[N], head[N], tot, S, T = N - 1, maxflow, minco;
    14 int dis[N], pre[N], vis[N];
    15  
    16 queue<int> q;
    17  
    18 struct edge { 
    19     int nxt, val, to, c;
    20 }e[N];
    21  
    22 int read() {
    23     int X = 0, p = 1; char c = getchar();
    24     for(; c > '9' || c < '0'; c = getchar()) if(c == '-') p = -1;
    25     for(; c >= '0' && c <= '9'; c = getchar()) X = X * 10 + c - '0';
    26     return X * p;
    27 }
    28  
    29 int ch(int x) {
    30     return ( (x + 1) ^ 1) - 1;
    31 }
    32  
    33 void added(int fr, int to, int val, int c) {
    34     e[++tot].to = to;
    35     e[tot].val = val;
    36     e[tot].c = c;
    37     e[tot].nxt = head[fr];
    38     head[fr] = tot;
    39 }
    40  
    41 void add(int fr, int to, int val, int c) {
    42     added(fr, to, val, c);
    43     added(to, fr, 0, -c);
    44 }
    45  
    46 int bfs() {
    47     memset(dis, 63, sizeof(dis));
    48     memset(vis, 0, sizeof(vis));
    49     memset(pre, 0, sizeof(pre));
    50     dis[S] = 0;
    51     vis[S] = 1;
    52     q.push(S);
    53     for(int u, nt; !q.empty(); ) {
    54         u = q.front(); q.pop();
    55         for(int i = head[u]; i; i = e[i].nxt ) {
    56             nt = e[i].to;
    57             if(dis[nt] <= dis[u] + e[i].c || !e[i].val) continue;
    58             dis[nt] = dis[u] + e[i].c;
    59             pre[nt] = i;
    60             if(!vis[nt]) vis[nt] = 1, q.push(nt);
    61         }
    62         vis[u] = 0;
    63     }
    64     return dis[T];
    65 }
    66  
    67 void EK() {
    68     for(; bfs() != inf; ) {
    69         int tmp = inf;
    70         for(int i = pre[T]; i; i = pre[e[ch(i)].to]) tmp = min(tmp, e[i].val);
    71         for(int i = pre[T]; i; i = pre[e[ch(i)].to]) e[i].val -= tmp, e[ch(i)].val += tmp;
    72         maxflow += tmp;
    73         minco += tmp * dis[T];
    74     }
    75 }
    76  
    77 int main()
    78 {
    79     n = rd; m = rd; maxin = rd;
    80     rep(i, 1, n) nd[i] = rd;
    81     rep(i, 1, n) cost[i] = rd;
    82     rep(i, 1, n) {
    83         add(S, i, inf, cost[i]);
    84         add(i, T, nd[i], 0);
    85         add(i, i + 1, maxin, m);
    86     }
    87     EK();
    88     printf("%d
    ", minco);
    89 }
    View Code
  • 相关阅读:
    使用VisualVM检测
    《自控力》读书笔记
    【转】Oracle索引的类型
    【转】Oracle索引HINT的使用
    【转】Oracle 执行计划(Explain Plan) 说明
    Oracle分区
    【转】Oracle索引失效问题
    【转】《从入门到精通云服务器》第七讲—负载均衡和CDN技术
    【转】《从入门到精通云服务器》第七讲—IAAS、PAAS、SAAS
    【转】《从入门到精通云服务器》第六讲—OpenStack基础
  • 原文地址:https://www.cnblogs.com/cychester/p/9503273.html
Copyright © 2011-2022 走看看