HDU 2676 Matrix
拆点跑费用流
1 #include <cstdio> 2 #include <algorithm> 3 #include <cstring> 4 #include <queue> 5 #define maxn 2010 6 #define maxm 10100 7 #define INF 1<<30 8 using namespace std; 9 struct MCMF{ 10 int src,sink,e,n; 11 int first[maxn]; 12 int cap[maxm],cost[maxm],v[maxm],next[maxm]; 13 bool flag; 14 void init(){ 15 e = 0; 16 memset(first,-1,sizeof(first)); 17 } 18 19 void add_edge(int a,int b,int cc,int ww){ 20 //printf("add:%d to %d,cap = %d,cost = %d\n",a,b,cc,ww); 21 cap[e] = cc;cost[e] = ww;v[e] = b; 22 next[e] = first[a];first[a] = e++; 23 cap[e] = 0;cost[e] = -ww;v[e] = a; 24 next[e] = first[b];first[b] = e++; 25 } 26 27 int d[maxn],pre[maxn],pos[maxn]; 28 bool vis[maxn]; 29 30 bool spfa(int s,int t){ 31 memset(pre,-1,sizeof(pre)); 32 memset(vis,0,sizeof(vis)); 33 queue<int> Q; 34 for(int i = 0;i <= n;i++) d[i] = INF; 35 Q.push(s);pre[s] = s;d[s] = 0;vis[s] = 1; 36 while(!Q.empty()){ 37 int u = Q.front();Q.pop(); 38 vis[u] = 0; 39 for(int i = first[u];i != -1;i = next[i]){ 40 if(cap[i] > 0 && d[u] + cost[i] < d[v[i]]){ 41 d[v[i]] = d[u] + cost[i]; 42 pre[v[i]] = u;pos[v[i]] = i; 43 if(!vis[v[i]]) vis[v[i]] = 1,Q.push(v[i]); 44 } 45 } 46 } 47 return pre[t] != -1; 48 } 49 50 int Mincost; 51 int Maxflow; 52 53 int MinCostFlow(int s,int t,int nn){ 54 Mincost = 0,Maxflow = 0,n = nn; 55 while(spfa(s,t)){ 56 int min_f = INF; 57 for(int i = t;i != s;i = pre[i]) 58 if(cap[pos[i]] < min_f) min_f = cap[pos[i]]; 59 Mincost += d[t] * min_f; 60 Maxflow += min_f; 61 for(int i = t;i != s;i = pre[i]){ 62 cap[pos[i]] -= min_f; 63 cap[pos[i]^1] += min_f; 64 } 65 } 66 return Mincost; 67 } 68 }; 69 MCMF g; 70 71 int N; 72 inline int id(int i,int j){ 73 return (i-1)*N + j; 74 } 75 76 int main(){ 77 while(scanf("%d",&N) != EOF){ 78 g.init(); 79 int k = N*N,ans = 0,a; 80 int S = 0,T = 2*k+1; 81 for(int i = 1;i <= N;i++){ 82 for(int j = 1;j <= N;j++){ 83 scanf("%d",&a); 84 if(i+j == 2 || i+j == 2*N){ 85 g.add_edge(id(i,j),id(i,j)+k,2,-a); 86 ans += a; 87 }else{ 88 g.add_edge(id(i,j),id(i,j)+k,1,-a); 89 } 90 if(i < N) g.add_edge(id(i,j)+k,id(i+1,j),1,0); 91 if(j < N) g.add_edge(id(i,j)+k,id(i,j+1),1,0); 92 } 93 } 94 g.add_edge(S,id(1,1),2,0); 95 g.add_edge(id(N,N)+k,T,2,0); 96 ans = -g.MinCostFlow(S,T,T) - ans; 97 printf("%d\n",ans); 98 } 99 return 0; 100 }
View Code
转载于:https://www.cnblogs.com/zhexipinnong/p/3369006.html
HDU 2676 Matrix相关推荐
- HDU OJ Matrix Swapping II
Matrix Swapping II Time Limit : 9000/3000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) ...
- HDU 4920 Matrix multiplication(矩阵相乘)
各种TEL,233啊.没想到是处理掉0的情况就能够过啊.一直以为会有极端数据.没想到居然是这种啊..在网上看到了一个AC的奇妙的代码,经典的矩阵乘法,仅仅只是把最内层的枚举,移到外面就过了啊...有点 ...
- 省赛训练3 G HDU 1759 Matrix Revolution(BFS)
Matrix Revolution Time Limit: 3000 ms /Memory Limit: 32768 kb Description Lele 现在不仅会整数A+B,A*B,还会矩阵A+ ...
- HDU 2830 Matrix Swapping II
暴力枚举+DP预处理. 可以枚举矩形底边是哪一行,枚举到一行的时候,计算以该行为底边,最大矩形面积是多少. #include<cstdio> #include<cstring> ...
- POJ 2135 Farm Tour amp;amp; HDU 2686 Matrix amp;amp; HDU 3376 Matrix Again 费用流求来回最短路...
累了就要写题解,近期总是被虐到没脾气. 来回最短路问题貌似也能够用DP来搞.只是拿费用流还是非常方便的. 能够转化成求满流为2 的最小花费.一般做法为拆点,对于 i 拆为2*i 和 2*i+1.然后连 ...
- hdu 2686 Matrix 最大费用最大流
最小费用最大流改动下,将本来的正边改成负边 就成了 最大费用最大流. 然后构图,自己慢慢构. 拆点,建立流量为1 费用为权值的边. #include<cstdio> #include< ...
- HDU 6336 Matrix from Arrays (杭电多校4E)
遇事不决先打表. 然后会发现(个屁)大的矩形是由一个2L*2L的矩形重复出现组成的然后我们就可以这个矩形分成四个点到(0, 0)点的矩形,这样问题就变成了求四个到顶点(0, 0)的矩形的面积,然后就先 ...
- poj 2226 Muddy Fields(合理建图+二分匹配)
1 /* 2 题意:用木板盖住泥泞的地方,不能盖住草.木板任意长!可以重叠覆盖! '*'表示泥泞的地方,'.'表示草! 3 思路: 4 首先让我们回忆一下HDU 2119 Matrix这一道题,一个矩 ...
- 杭电OJ分类题目(4)-Graph
原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(4) HDU Graph Theory - U ...
最新文章
- php自动分配,PHP上传文件时自动分配路径的方法_php技巧
- 如何用Excel直接查询Oracle中的数据(转)
- Java 洛谷 P1464 Function
- c/c++整理--c++面向对象(3)
- NHibernate的关键点精要
- 00018_流程控制语句switch
- python基础布尔和None(三)
- windows安装ODBC
- Perl Fork的问题
- 智能电视也需“杀毒”
- 【DFS】n皇后问题(代码逐句分析)
- iCode代码托管的一些基本指令
- 程序员记录biji的工具_程序员专用笔记 Quiver
- MySQL 表空间碎片
- MySQL聚集索引与非聚集索引相关总结
- excel如何打开100万行以上的csv文件
- 软件测试精品书单推荐指南!
- 多项式拟合(polyfit)及局部加权回归(Lowess)对二维数据基础规律和离群特征学习的分析对比
- kettle快速连接clickhouse
- 【单例深思】枚举实现单例原理
热门文章
- primefaces教程_Primefaces FileUpload组件示例教程
- java开发课程表_Java开发人员课程包,折扣高达86%
- primefaces_Primefaces AccordionPanel组件示例
- kotlin半生对象_Kotlin单一对象,Kotlin伴侣对象
- 开课吧Java课堂:特殊的字符串如何操作,字符串如何连接
- 【云周刊】 第211期:“阿里巴巴小程序繁星计划”:20亿扶持200万小程序开发者和100万商家...
- Hadoop单词统计
- 基于SaltStack完成LVS的配置管理
- 秒杀系统设计中的业务性思考
- MSP430学习小结3-MSP430基本时钟模块