UVA 1376 Animal Run 最短路
平面图最小割转最短路
书上是说以边为结点建图
但是我觉得好像以每块空白区域为结点建图会更自然点。把矩形的右上方编号为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 最短路相关推荐
- uva 10285 - Longest Run on a Snowboard(dp+记忆化搜索)
1.http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVa 816 (BFS求最短路)
/*816 - Abbott's Revenge ---代码完全参考刘汝佳算法入门经典 ---strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:char * strchr (cons ...
- [UVALive 3661] Animal Run
图片加载可能有点慢,请跳过题面先看题解,谢谢 附:中文题面,[BZOJ1001]狼抓兔子 就要考联赛了,博客里题目的\(style\)都变了,几乎都是些套路啥的,这道题也比较套路 第一眼看这道题的感觉 ...
- uva 10285——Longest Run on a Snowboard
题意:在一个R*c的矩阵上找一条高度严格递减的最长路,起点任意,每次可以走上下左右. 思路:DAG上的最长路问题,直接套用记忆化搜索的模板,dp(i,j)=max(dp(ii,jj)四个方向最大值), ...
- uva 10801 - Lift Hopping(最短路Dijkstra)
1 /* 2 题目大意: 3 就是一幢大厦中有0-99的楼层, 然后有1-5个电梯!每个电梯有一定的上升或下降速度和楼层的停止的位置! 4 问从第0层楼到第k层最少经过多长时间到达! 5 6 思路:明 ...
- UVA 11367 Full Tank? 最短路
以状态(u,fuel)为结点建图(把每个点拆成100个),表示在点u时还剩下fuel个单位的燃料,那么状态就可以这样转移: (u,fuel)->(u,fuel+i) : 加i单位的燃料,所以这 ...
- Uva 10537过路费 反向最短路
题意 运送货物需要缴纳过路费,进入一个村庄需要缴纳1个单位的货物,而进入一个城镇时,每20个单位的货物中就要上缴1个单位(向上取整).你的任务时已知运送到终点的货物数量,求出初始时所需要的最少货物,以 ...
- UVa在线比赛单题汇总-----DP专题
动态规划基础 例题 LA 3882 UVa 3882 - And Then There Was One 递推------------无力orz UVa 10635 10635 - Prince and ...
- 《题目与解读》红书 训练笔记目录《ACM国际大学生程序设计竞赛题目与解读》
虽然2012年出版的老书了,但是是由三次世界冠军的上海交大ACM队出版的书籍,选择的题目是ACM经典中的经典,书中有非常详细的题解,可以学到很多东西,值得一刷. 目录 第一部分 第一章 数学 1.1 ...
最新文章
- python 多级递归_Python文件目录和系统操作,os模块和os.path模块
- Houdini FX 14 重磅推出!(附下载方式)
- python安装requests
- mysql忽略数据类型_MYSQL 常用数据类型
- PHPUnit安装、用法、测试(三)
- 编程语言对比 数组
- 从最新的ACL、NAACL和EMNLP中详解知识增强的语言预训练模型
- CRM客户关系管理系统
- GD32F103ZKT6替换STM32F103调试手记
- 撬动地球的GOOGLE,告诉你GOOGLE不能说的秘密
- Windows Server 2008 R2 官方简体中文免费企业版/标准版/数据中心版下载
- eclipse报错:The project was not built due to “Could not delete...”. Fix the problem...
- python通过pypiwin32操作PPT
- 筛选后系列填充_案例分享10——如何在筛选后的表格中粘贴数据(二)
- 大学python笔记_python笔记(1) 关于我们应不应该继续学习python
- Bigben vlc sdl 播放视频可随窗口改变大小
- NX二次开发-UFUN创建工程图注释UF_DRF_create_note
- 桂 林 理 工 大 学实 验 报 告实验五 数组
- 16 tia 内容说明 安装包_博途v12|Tia Portal v12下载 附安装说明 - 121下载站
- 计算机导论模拟测试练习(2018年秋)F. 习题课一 G. 习题课二 H. 跳马