• [CODEVS1914] 运输问题(最小费用最大流)


    传送门

    水题。

    建图都不想说了

    ——代码

      1 #include <queue>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <iostream>
      5 #define INF 1e9
      6 #define M 101
      7 #define N 100001
      8 #define min(x, y) ((x) < (y) ? (x) : (y))
      9 
     10 int n, m, cnt, s, t;
     11 int a[M], b[M], map[M][M], dis[N], pre[N];
     12 int head[N], to[N << 1], val[N << 1], cost[N << 1], next[N << 1];
     13 bool vis[N];
     14 
     15 inline int read()
     16 {
     17     int x = 0, f = 1;
     18     char ch = getchar();
     19     for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
     20     for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
     21     return x * f;
     22 }
     23 
     24 inline void add(int x, int y, int z, int c)
     25 {
     26     to[cnt] = y;
     27     val[cnt] = z;
     28     cost[cnt] = c;
     29     next[cnt] = head[x];
     30     head[x] = cnt++;
     31 }
     32 
     33 inline bool spfa()
     34 {
     35     int i, u, v;
     36     std::queue <int> q;
     37     memset(vis, 0, sizeof(vis));
     38     memset(pre, -1, sizeof(pre));
     39     memset(dis, 127 / 3, sizeof(dis));
     40     q.push(s);
     41     dis[s] = 0;
     42     while(!q.empty())
     43     {
     44         u = q.front(), q.pop();
     45         vis[u] = 0;
     46         for(i = head[u]; i ^ -1; i = next[i])
     47         {
     48             v = to[i];
     49             if(val[i] && dis[v] > dis[u] + cost[i])
     50             {
     51                 dis[v] = dis[u] + cost[i];
     52                 pre[v] = i;
     53                 if(!vis[v])
     54                 {
     55                     q.push(v);
     56                     vis[v] = 1;
     57                 }
     58             }
     59         }
     60     }
     61     return pre[t] ^ -1;
     62 }
     63 
     64 inline int dinic()
     65 {
     66     int i, d, sum = 0;
     67     while(spfa())
     68     {
     69         d = 1e9;
     70         for(i = pre[t]; i ^ -1; i = pre[to[i ^ 1]]) d = min(d, val[i]);
     71         for(i = pre[t]; i ^ -1; i = pre[to[i ^ 1]])
     72         {
     73             val[i] -= d;
     74             val[i ^ 1] += d;
     75         }
     76         sum += dis[t] * d;
     77     }
     78     return sum;
     79 }
     80 
     81 int main()
     82 {
     83     int i, j;
     84     m = read();
     85     n = read();
     86     s = 0, t = n + m + 1;
     87     memset(head, -1, sizeof(head));
     88     for(i = 1; i <= m; i++)
     89     {
     90         a[i] = read();
     91         add(s, i, a[i], 0);
     92         add(i, s, 0, 0);
     93     }
     94     for(i = 1; i <= n; i++)
     95     {
     96         b[i] = read();
     97         add(i + m, t, b[i], 0);
     98         add(t, i + m, 0, 0);
     99     }
    100     for(i = 1; i <= m; i++)
    101         for(j = 1; j <= n; j++)
    102         {
    103             map[i][j] = read();
    104             add(i, j + m, INF, map[i][j]);
    105             add(j + m, i, 0, -map[i][j]);
    106         }
    107     printf("%d
    ", dinic());
    108     cnt = 0;
    109     memset(head, -1, sizeof(head));
    110     for(i = 1; i <= m; i++)
    111     {
    112         add(s, i, a[i], 0);
    113         add(i, s, 0, 0);
    114     }
    115     for(i = 1; i <= n; i++)
    116     {
    117         add(i + m, t, b[i], 0);
    118         add(t, i + m, 0, 0);
    119     }
    120     for(i = 1; i <= m; i++)
    121         for(j = 1; j <= n; j++)
    122         {
    123             add(i, j + m, INF, -map[i][j]);
    124             add(j + m, i, 0, map[i][j]);
    125         }
    126     printf("%d
    ", -dinic());
    127     return 0;
    128 }
    View Code
  • 相关阅读:
    HTTP协议 学习笔记一
    web发展历史
    Easydarwin加FFMPEG实现HLS流视频点播
    C# Socket异步实现消息发送--附带源码
    C# Activex调用USB摄像头--附带源码
    C# listbox DataSource数据绑定--一年半以前的bug
    ASP.NET MVC WebAPI实现文件批量上传
    ASP.NET MVC使用SignalR统计在线用户人数
    Chart.js Y轴数据以百分比展示
    Java获取字符串信息
  • 原文地址:https://www.cnblogs.com/zhenghaotian/p/7007818.html
Copyright © 2020-2023  润新知