平面图最小割转最短路

书上是说以边为结点建图

但是我觉得好像以每块空白区域为结点建图会更自然点。把矩形的右上方编号为0,左下方编号为1,分别为起点终点

//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<iostream>
#include<sstream>
#include<cmath>
#include<climits>
#include<string>
#include<map>
#include<queue>
#include<vector>
#include<stack>
#include<set>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
#define pb(a) push(a)
#define INF 0x1f1f1f1f
#define lson idx<<1,l,mid
#define rson idx<<1|1,mid+1,r
#define PI  3.1415926535898
template<class T> T min(const T& a,const T& b,const T& c) {return min(min(a,b),min(a,c));
}
template<class T> T max(const T& a,const T& b,const T& c) {return max(max(a,b),max(a,c));
}
void debug() {
#ifdef ONLINE_JUDGE
#elsefreopen("in.txt","r",stdin);//freopen("d:\\out1.txt","w",stdout);
#endif
}
int getch() {int ch;while((ch=getchar())!=EOF) {if(ch!=' '&&ch!='\n')return ch;}return EOF;
}
struct HeapNode
{int d,u;bool operator < (const HeapNode &ant) const{return d>ant.d;}
};
struct Edge
{int from,to;int dist;
};
const int maxn=2000005;
struct Dijksta
{int n;vector<int> g[maxn];vector<Edge> edge;int done[maxn];int d[maxn];void init(int n){this->n=n;for(int i=0;i<=n;i++)g[i].clear();edge.clear();}void add(int u,int v,int w){Edge e=(Edge){u,v,w};edge.push_back(e);g[u].push_back(edge.size()-1);}void solve(int s){for(int i=0;i<=n;i++)d[i]=INF;memset(done,0,sizeof(done));d[s]=0;priority_queue<HeapNode> q;q.push((HeapNode){0,s});while(!q.empty()){HeapNode x=q.top();q.pop();if(done[x.u])continue;int u=x.u;done[u]=1;for(int i=0;i<g[u].size();i++){Edge &e=edge[g[u][i]];if(d[u]+e.dist<d[e.to]){d[e.to]=d[u]+e.dist;q.push((HeapNode){d[e.to],e.to});}}}}
};Dijksta solver;
int n,m;
int id[1005][1005][2];
const int UP=0,DOWN=1;
int vcnt;
int ID(int a,int b,int d)
{if(a<1||b>=m)return 0;if(a>=n||b<1)return 1;int &x=id[a][b][d];if(x==0)x=++vcnt;return x;
}int main()
{//freopen("d:\\in1.txt","r",stdin);int ca=0;while(scanf("%d%d",&n,&m)!=EOF&&m){solver.init(n*m*2+2);vcnt=2;memset(id,0,sizeof(id));//horizontalfor(int i=1;i<=n;i++)for(int j=1;j<m;j++){int u,v,w;scanf("%d",&w);u=ID(i-1,j,DOWN);v=ID(i,j,UP);solver.add(u,v,w);solver.add(v,u,w);}//verticalfor(int i=1;i<n;i++)for(int j=1;j<=m;j++){int u,v,w;scanf("%d",&w);u=ID(i,j-1,UP);v=ID(i,j,DOWN);solver.add(u,v,w);solver.add(v,u,w);}//diagonalfor(int i=1;i<n;i++)for(int j=1;j<m;j++){int u,v,w;scanf("%d",&w);u=ID(i,j,UP);v=ID(i,j,DOWN);solver.add(u,v,w);solver.add(v,u,w);}solver.solve(0);printf("Case %d: Minimum = %d\n",++ca,solver.d[1]);}return 0;
}

View Code

转载于:https://www.cnblogs.com/BMan/p/3632975.html

UVA 1376 Animal Run 最短路相关推荐

  1. uva 10285 - Longest Run on a Snowboard(dp+记忆化搜索)

    1.http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  2. UVa 816 (BFS求最短路)

    /*816 - Abbott's Revenge ---代码完全参考刘汝佳算法入门经典 ---strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:char * strchr (cons ...

  3. [UVALive 3661] Animal Run

    图片加载可能有点慢,请跳过题面先看题解,谢谢 附:中文题面,[BZOJ1001]狼抓兔子 就要考联赛了,博客里题目的\(style\)都变了,几乎都是些套路啥的,这道题也比较套路 第一眼看这道题的感觉 ...

  4. uva 10285——Longest Run on a Snowboard

    题意:在一个R*c的矩阵上找一条高度严格递减的最长路,起点任意,每次可以走上下左右. 思路:DAG上的最长路问题,直接套用记忆化搜索的模板,dp(i,j)=max(dp(ii,jj)四个方向最大值), ...

  5. uva 10801 - Lift Hopping(最短路Dijkstra)

    1 /* 2 题目大意: 3 就是一幢大厦中有0-99的楼层, 然后有1-5个电梯!每个电梯有一定的上升或下降速度和楼层的停止的位置! 4 问从第0层楼到第k层最少经过多长时间到达! 5 6 思路:明 ...

  6. UVA 11367 Full Tank? 最短路

    以状态(u,fuel)为结点建图(把每个点拆成100个),表示在点u时还剩下fuel个单位的燃料,那么状态就可以这样转移: (u,fuel)->(u,fuel+i)  : 加i单位的燃料,所以这 ...

  7. Uva 10537过路费 反向最短路

    题意 运送货物需要缴纳过路费,进入一个村庄需要缴纳1个单位的货物,而进入一个城镇时,每20个单位的货物中就要上缴1个单位(向上取整).你的任务时已知运送到终点的货物数量,求出初始时所需要的最少货物,以 ...

  8. UVa在线比赛单题汇总-----DP专题

    动态规划基础 例题 LA 3882 UVa 3882 - And Then There Was One 递推------------无力orz UVa 10635 10635 - Prince and ...

  9. 《题目与解读》红书 训练笔记目录《ACM国际大学生程序设计竞赛题目与解读》

    虽然2012年出版的老书了,但是是由三次世界冠军的上海交大ACM队出版的书籍,选择的题目是ACM经典中的经典,书中有非常详细的题解,可以学到很多东西,值得一刷. 目录 第一部分 第一章 数学 1.1 ...

最新文章

  1. python 多级递归_Python文件目录和系统操作,os模块和os.path模块
  2. Houdini FX 14 重磅推出!(附下载方式)
  3. python安装requests
  4. mysql忽略数据类型_MYSQL 常用数据类型
  5. PHPUnit安装、用法、测试(三)
  6. 编程语言对比 数组
  7. 从最新的ACL、NAACL和EMNLP中详解知识增强的语言预训练模型
  8. CRM客户关系管理系统
  9. GD32F103ZKT6替换STM32F103调试手记
  10. 撬动地球的GOOGLE,告诉你GOOGLE不能说的秘密
  11. Windows Server 2008 R2 官方简体中文免费企业版/标准版/数据中心版下载
  12. eclipse报错:The project was not built due to “Could not delete...”. Fix the problem...
  13. python通过pypiwin32操作PPT
  14. 筛选后系列填充_案例分享10——如何在筛选后的表格中粘贴数据(二)
  15. 大学python笔记_python笔记(1) 关于我们应不应该继续学习python
  16. Bigben vlc sdl 播放视频可随窗口改变大小
  17. NX二次开发-UFUN创建工程图注释UF_DRF_create_note
  18. 桂 林 理 工 大 学实 验 报 告实验五 数组
  19. 16 tia 内容说明 安装包_博途v12|Tia Portal v12下载 附安装说明 - 121下载站
  20. 计算机导论模拟测试练习(2018年秋)F. 习题课一 G. 习题课二 H. 跳马

热门文章

  1. 到底什么时候该使用MQ
  2. Java 常用类库 之 Random 随机数类实例
  3. mysql5.5 二进制安装
  4. HTML SVG 如何下载svg文件,png文件,jpge文件
  5. mysql分页原理和高效率的mysql分页查询语句
  6. live writer 51cto博客设置
  7. 随机查询N条记录MySQL、SQLServer、Oracle、postgreSQL
  8. 出现adb连接不上的解决办法(转载)
  9. 反汇编教程及汇编命令详解(一)
  10. [特征工程系列五]基于蒙特卡洛搜索树的半自动特征工程方案