简单的费用流问题,每个人对每个任务连边,每个任务对汇点连,源点对每个人连,最大费用取反即可

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define lowbit(x) ((x)&(-x))
  4. typedef long long LL;
  5.  
  6. const int maxm = 2e4+;
  7. const int INF = 0x3f3f3f3f;
  8.  
  9. struct edge{
  10. int u, v, cap, flow, cost, nex;
  11. } edges[maxm];
  12.  
  13. int head[maxm], cur[maxm], cnt, fa[], d[], n, val[][];
  14. bool inq[];
  15.  
  16. void init() {
  17. memset(head, -, sizeof(head));
  18. }
  19.  
  20. void add(int u, int v, int cap, int cost) {
  21. edges[cnt] = edge{u, v, cap, , cost, head[u]};
  22. head[u] = cnt++;
  23. }
  24.  
  25. void addedge(int u, int v, int cap, int cost) {
  26. add(u, v, cap, cost), add(v, u, , -cost);
  27. }
  28.  
  29. bool spfa(int s, int t, int &flow, LL &cost) {
  30. for(int i = ; i <= *n+; ++i) d[i] = INF; //init()
  31. memset(inq, false, sizeof(inq));
  32. d[s] = , inq[s] = true;
  33. fa[s] = -, cur[s] = INF;
  34. queue<int> q;
  35. q.push(s);
  36. while(!q.empty()) {
  37. int u = q.front();
  38. q.pop();
  39. inq[u] = false;
  40. for(int i = head[u]; i != -; i = edges[i].nex) {
  41. edge& now = edges[i];
  42. int v = now.v;
  43. if(now.cap > now.flow && d[v] > d[u] + now.cost) {
  44. d[v] = d[u] + now.cost;
  45. fa[v] = i;
  46. cur[v] = min(cur[u], now.cap - now.flow);
  47. if(!inq[v]) {q.push(v); inq[v] = true;}
  48. }
  49. }
  50. }
  51. if(d[t] == INF) return false;
  52. flow += cur[t];
  53. cost += 1LL*d[t]*cur[t];
  54. for(int u = t; u != s; u = edges[fa[u]].u) {
  55. edges[fa[u]].flow += cur[t];
  56. edges[fa[u]^].flow -= cur[t];
  57. }
  58. return true;
  59. }
  60.  
  61. int MincostMaxflow(int s, int t, LL &cost) {
  62. cost = ;
  63. int flow = ;
  64. while(spfa(s, t, flow, cost));
  65. return flow;
  66. }
  67.  
  68. void build_graph(int f) {
  69. init();
  70. int s = , t = *n+;
  71. for(int i = ; i <= n; ++i) {
  72. addedge(s, i, , );
  73. for(int j = ; j <= n; ++j) {
  74. addedge(i, j+n, , f*val[i][j]);
  75. }
  76. }
  77. for(int i = ; i <= n; ++i)
  78. addedge(i+n, t, , );
  79. }
  80.  
  81. void run_case() {
  82. cin >> n;
  83. int s = , t = *n+;
  84. for(int i = ; i <= n; ++i)
  85. for(int j = ; j <= n; ++j)
  86. cin >> val[i][j];
  87. build_graph();
  88. LL cost = ;
  89. MincostMaxflow(s, t, cost);
  90. cout << cost << "\n";
  91. build_graph(-);
  92. cost = ;
  93. MincostMaxflow(s, t, cost);
  94. cout << -cost;
  95. }
  96.  
  97. int main() {
  98. ios::sync_with_stdio(false), cin.tie();
  99. run_case();
  100. cout.flush();
  101. return ;
  102. }

luogu P4014 分配问题的更多相关文章

  1. 洛谷P4014 分配问题【最小/大费用流】题解+AC代码

    洛谷P4014 分配问题[最小/大费用流]题解+AC代码 题目描述 有 n 件工作要分配给 n 个人做.第 i 个人做第 j 件工作产生的效益为c ij. 试设计一个将 n 件工作分配给 n 个人做的 ...

  2. 洛谷——P4014 分配问题

    P4014 分配问题 题目描述 有 nn 件工作要分配给 nn 个人做.第 ii 个人做第 jj 件工作产生的效益为 c_{ij}cij​ .试设计一个将 nn 件工作分配给 nn 个人做的分配方案, ...

  3. Luogu P4014 「 网络流 24 题 」分配问题

    解题思路 还是建立超级源点和超级汇点,又因为题目给出规定一个人只能修一个工件,所以建图的时候还要讲容量都设为$1$. 人的编号是$1\rightarrow n$,工件的编号是$n+1\rightarr ...

  4. 洛谷P4014分配问题——网络流24题

    题目:https://www.luogu.org/problemnew/show/P4014 最大/小费用最大流裸题. 代码如下: #include<iostream> #include& ...

  5. P4014 分配问题 网络流

    题目描述 有 nn 件工作要分配给 nn 个人做.第 ii 个人做第 jj 件工作产生的效益为 c_{ij}cij​ .试设计一个将 nn 件工作分配给 nn个人做的分配方案,使产生的总效益最大. 输 ...

  6. 洛谷P4014 分配问题(费用流)

    传送门 可以把原图看做一个二分图,人在左边,任务在右边,求一个带权的最大和最小完美匹配 然而我并不会二分图做法,所以只好直接用费用流套进去,求一个最小费用最大流和最大费用最大流即可 //minamot ...

  7. P4014 分配问题

    \(\color{#0066ff}{题目描述}\) 有 \(n\) 件工作要分配给 \(n\) 个人做.第 \(i\) 个人做第 \(j\) 件工作产生的效益为 \(c_{ij}\) .试设计一个将 ...

  8. 洛谷 P4014 分配问题 【最小费用最大流+最大费用最大流】

    其实KM更快--但是这道题不卡,所以用了简单粗暴的费用流,建图非常简单,s向所有人连流量为1费用为0的边来限制流量,所有工作向t连流量为1费用为0的边,然后对应的人和工作连(i,j,1,cij),跑一 ...

  9. 洛谷P4014 分配问题(费用流)

    题目描述 有 nn 件工作要分配给 nn 个人做.第 ii 个人做第 jj 件工作产生的效益为 c_{ij}cij​ .试设计一个将 nn 件工作分配给 nn 个人做的分配方案,使产生的总效益最大. ...

随机推荐

  1. 安卓基础(Navigation)

    今天学习了简单的Navigation:页面导航. 页面导航的简单例子: MainAcitivity: package com.example.navigation; import android.su ...

  2. HTML5 canvas自制画板

    找到一个画板的插件,很好用,点击下载  ,页面很简单,但是呢,貌似不适用于手机端,,,

  3. [踩坑记录] windows10 应用商店打不开 代码: 0x80131500

    在某博客看到的方法,供参考,可以尝试一下,我的也是这么解决的1.打开“运行”输入 inetcpl.cpl (“WINDOWS”+“R”键,输入 inetcpl.cpl亦可)2.点开高级往下拉,勾上&q ...

  4. 吴裕雄 python 神经网络——TensorFlow 完整神经网络样例程序

    import tensorflow as tf from numpy.random import RandomState batch_size = 8 w1= tf.Variable(tf.rando ...

  5. AspectRatio图片的宽高比、Card 卡片组件

    一.AspectRatio 组件 AspectRatio 的作用是根据设置调整子元素 child 的宽高比. AspectRatio 首先会在布局限制条件允许的范围内尽可能的扩展,widget 的高度 ...

  6. 组件向外暴露v-model绑定的参数

    <template> <div class="search-box"> <i class="icon-search">< ...

  7. mysql 默认信息

    泰基MYSQL默认信息 登录名1-------默认用户 名字:root 密码:123 登录名2-------APP对应的数据库 名字:hotekey 密码:8888

  8. 杭电 1059 Dividing

    Dividing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  9. stm32 串口发送字符串丢失第一个字节

    使用stm32f103调试串口通讯时,上电后发送的字符串的第一个字节丢失. 发送数据GpuSend("SPG(2);"); 接收端收到的数据为:PG(2);,第一个字符丢失. 出现 ...

  10. nginx反向代理实战之轮询、Ip_hash、权重

    实验环境 192.168.200.111 web1 centos7 192.168.200.112 web2 centos7 192.168.200.113 wev3 centos7 三台主机环境: ...