最大费用最大流

咋写?取个相反数就可以了……

  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdio>
  4. #include <queue>
  5. using namespace std;
  6. int n, a[605][605], ss, tt, hea[750005], cnt, minCost, dis[750005], pre[750005];
  7. queue<int> d;
  8. bool vis[750005];
  9. struct Edge{
  10. int too, nxt, val, cst;
  11. }edge[2200005];
  12. const int oo=0x3f3f3f3f;
  13. const int dx[]={0, 1, 0};
  14. const int dy[]={0, 0, 1};
  15. int f(int i, int j){
  16. return (i-1)*n+j;
  17. }
  18. void init(){
  19. minCost = cnt = 0;
  20. memset(hea, -1, sizeof(hea));
  21. }
  22. void add_edge(int fro, int too, int val, int cst){
  23. edge[cnt].nxt = hea[fro];
  24. edge[cnt].too = too;
  25. edge[cnt].val = val;
  26. edge[cnt].cst = cst;
  27. hea[fro] = cnt++;
  28. }
  29. void addEdge(int fro, int too, int val, int cst){
  30. add_edge(fro, too, val, cst);
  31. add_edge(too, fro, 0, -cst);
  32. }
  33. bool spfa(){
  34. memset(dis, 0x3f, sizeof(dis));
  35. memset(pre, -1, sizeof(pre));
  36. d.push(ss);
  37. vis[ss] = true;
  38. dis[ss] = 0;
  39. while(!d.empty()){
  40. int x=d.front();
  41. d.pop();
  42. vis[x] = false;
  43. for(int i=hea[x]; i!=-1; i=edge[i].nxt){
  44. int t=edge[i].too;
  45. if(dis[t]>dis[x]+edge[i].cst && edge[i].val>0){
  46. dis[t] = dis[x] + edge[i].cst;
  47. pre[t] = i;
  48. if(!vis[t]){
  49. vis[t] = true;
  50. d.push(t);
  51. }
  52. }
  53. }
  54. }
  55. return dis[tt]!=oo;
  56. }
  57. void mcmf(){
  58. while(spfa()){
  59. int tmp=0x3f3f3f3f;
  60. for(int i=pre[tt]; i!=-1; i=pre[edge[i^1].too])
  61. tmp = min(tmp, edge[i].val);
  62. for(int i=pre[tt]; i!=-1; i=pre[edge[i^1].too]){
  63. edge[i].val -= tmp;
  64. edge[i^1].val += tmp;
  65. minCost += tmp * edge[i].cst;
  66. }
  67. }
  68. }
  69. int main(){
  70. while(scanf("%d", &n)!=EOF){
  71. init();
  72. for(int i=1; i<=n; i++)
  73. for(int j=1; j<=n; j++)
  74. scanf("%d", &a[i][j]);
  75. ss = 0; tt = 2 * n * n + 1;
  76. addEdge(ss, 1, 2, 0);
  77. addEdge(1, 1+n*n, 1, 0);
  78. addEdge(f(n,n), f(n,n)+n*n, 1, 0);
  79. addEdge(f(n,n)+n*n, tt, 2, 0);
  80. for(int i=1; i<=n; i++)
  81. for(int j=1; j<=n; j++){
  82. addEdge(f(i,j), f(i,j)+n*n, 1, -a[i][j]);
  83. for(int k=1; k<=2; k++){
  84. int kx=i+dx[k];
  85. int ky=j+dy[k];
  86. if(kx>n || ky>n) continue;
  87. addEdge(f(i,j)+n*n, f(kx,ky), oo, 0);
  88. }
  89. }
  90. mcmf();
  91. printf("%d\n", -minCost);
  92. }
  93. return 0;
  94. }

hdu3376 Matrix Again的更多相关文章

  1. luogu2770 航空路线问题

    前置技能:HDU3376 Matrix Again 所以看到这个题,我们也会想着用最大费用最大流解决,因为从起点飞到终点再飞回来,就等于从起点飞两次到终点且这两次飞行除了起点终点之外没有访问超过一次的 ...

  2. HDU 2686 Matrix 3376 Matrix Again(费用流)

    HDU 2686 Matrix 题目链接 3376 Matrix Again 题目链接 题意:这两题是一样的,仅仅是数据范围不一样,都是一个矩阵,从左上角走到右下角在从右下角走到左上角能得到最大价值 ...

  3. angular2系列教程(十一)路由嵌套、路由生命周期、matrix URL notation

    今天我们要讲的是ng2的路由的第二部分,包括路由嵌套.路由生命周期等知识点. 例子 例子仍然是上节课的例子:

  4. Pramp mock interview (4th practice): Matrix Spiral Print

    March 16, 2016 Problem statement:Given a 2D array (matrix) named M, print all items of M in a spiral ...

  5. Atitit Data Matrix dm码的原理与特点

    Atitit Data Matrix dm码的原理与特点 Datamatrix原名Datacode,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于 ...

  6. Android笔记——Matrix

    转自:http://www.cnblogs.com/qiengo/archive/2012/06/30/2570874.html#translate Matrix的数学原理 在Android中,如果你 ...

  7. 通过Matrix进行二维图形仿射变换

    Affine Transformation是一种二维坐标到二维坐标之间的线性变换,保持二维图形的"平直性"和"平行性".仿射变换可以通过一系列的原子变换的复合来 ...

  8. [LeetCode] Kth Smallest Element in a Sorted Matrix 有序矩阵中第K小的元素

    Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth ...

  9. [LeetCode] Longest Increasing Path in a Matrix 矩阵中的最长递增路径

    Given an integer matrix, find the length of the longest increasing path. From each cell, you can eit ...

随机推荐

  1. 二分搜索 Codeforces Round #299 (Div. 2) C. Tavas and Karafs

    题目传送门 /* 题意:给定一个数列,求最大的r使得[l,r]的数字能在t次全变为0,每一次可以在m的长度内减1 二分搜索:搜索r,求出sum <= t * m的最大的r 详细解释:http:/ ...

  2. 不通过ecplise,只通过文件目录 创建最简单的JSP文件

    手动创建最简单的JSP 文件   1.在Tomcat 6.0的安装目录的webapps目录下新建一个目录,起名叫myapp. 2.在myapp目录下新建一个目录WEB-INF,注意,目录名称是区分大小 ...

  3. HDU 4565 So Easy! 数学 + 矩阵 + 整体思路化简

    http://acm.hdu.edu.cn/showproblem.php?pid=4565 首先知道里面那个东西,是肯定有小数的,就是说小数部分是约不走的,(因为b限定了不是一个完全平方数). 因为 ...

  4. RHEL6.5----LVS(NAT)

    主机名 IP  所需软件  master 192.168.30.130(Nat) 192.168.17.130(VMnet4) ipvsadm  node-1 192.168.17.131  http ...

  5. poj2112Optimal Milking(二分+最大流)

    链接 floyd求出牛到机器的最短距离,二分距离,小于当前距离的边容量设为1,求出满容量下的最短距离. EK算法 #include <iostream> #include<cstdi ...

  6. [BZOJ1045][HAOI2008]糖果传递 数学

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1045 我们假设每一个小朋友的代价为$x[i]$,每一次都从前面一个小朋友那里拿,这种贪心跟 ...

  7. 数据库管理系统X

    大部分DBMS提供数据定义语言DDL(Data Definition Language)和数据操作语言DML(Data Manipulation Language),供用户定义数据库的模式结构与权限约 ...

  8. 骑芯供应链(T 面试)

    1.目前市面上主流的团队开发模式是什么? 正解:DevOps,https://blog.csdn.net/bntX2jSQfEHy7/article/details/79168865 2.你觉得什么是 ...

  9. Vue.js Extension Pack 和 jsconfig.json 可以定位跳转到@开头的路径等自定义路径

    Vue.js Extension Pack | vsCode插件 可以定位跳转到@开头的路径等自定义路径 webpack自定义别名后,VScode路径提示问题 //tsconfig.json 或者 j ...

  10. json-server && axios

    json-server && axios vue2.0项目实战(3)使用axios发送请求 https://www.cnblogs.com/zhouyangla/p/6753673.h ...