POJ2387(dijkstra堆优化)
Farmer John's field has N (2 <= N <= 1000) landmarks in it, uniquely numbered 1..N. Landmark 1 is the barn; the apple tree grove in which Bessie stands all day is landmark N. Cows travel in the field using T (1 <= T <= 2000) bidirectional cow-trails of various lengths between the landmarks. Bessie is not confident of her navigation ability, so she always stays on a trail from its start to its end once she starts it.
Given the trails between the landmarks, determine the minimum distance Bessie must walk to get back to the barn. It is guaranteed that some such route exists.
Input
* Lines 2..T+1: Each line describes a trail as three space-separated integers. The first two integers are the landmarks between which the trail travels. The third integer is the length of the trail, range 1..100.
Output
Sample Input
- 5 5
- 1 2 20
- 2 3 30
- 3 4 20
- 4 5 20
- 1 5 100
Sample Output
- 90
//dijkstra
- #include<iostream>
- #include<stdio.h>
- #include<string.h>
- #include<algorithm>
- #include<cmath>
- #include<vector>
- #include<queue>
- #define maxn 1005
- #define ms(x,n) memset(x,n,sizeof x);
- const int inf=0x3f3f3f3f;
- using namespace std;
- int n,t;
- int u,v,w;
- int cost[][];
- int d[];
- bool vis[];
- void dij(int s)
- {
- int i,j;
- ms(vis,);
- memset(d,0x3f,sizeof d);
- d[s]=;
- for(i=;i<=n;i++)
- {
- int p=inf,e=-;
- for(j=;j<=n;j++)
- {
- if(!vis[j]&&d[j]<p)
- {
- p=d[j];
- e=j;
- }
- }
- if(e==-)return;
- vis[e]=;
- for(j=;j<=n;j++)
- {
- if(!vis[j]&&d[j]>cost[e][j]+d[e])
- {d[j]=cost[e][j]+d[e];
- }
- }
- }
- }
- int main()
- {
- int i,j;
- cin>>t>>n;
- for(i=;i<=n;i++)
- for(j=;j<=n;j++)
- if(i!=j)
- cost[i][j]=inf;
- else if(i==j)
- cost[i][j]=;
- for(i=;i<t;i++)
- {
- cin>>u>>v>>w;
- cost[u][v]=cost[v][u]=min(cost[u][v],w);
- }
- dij();
- cout<<d[n];
- }
- //dijkstra堆优化
- #include<iostream>
- #include<stdio.h>
- #include<string.h>
- #include<algorithm>
- #include<cmath>
- #include<vector>
- #include<queue>
- #define maxn 1005
- #define ms(x,n) memset(x,n,sizeof x);
- const int inf=0x3f3f3f3f;
- using namespace std;
- int n,t;
- int u,v,w;
- int cost[][];
- int d[];
- bool vis[];
- typedef pair<int,int> p;//cost[],点的编号
- vector<p>g[maxn];
- void dij(int s)
- {
- ms(vis,);
- ms(d,0x3f);
- d[s]=;
- priority_queue<p,vector<p>,greater<p> >q;
- q.push(p(d[s],s));
- while(!q.empty())
- {
- p cur=q.top();
- q.pop();
- u=cur.second;
- //if(cur.first<d[u])continue;
- int sz=g[u].size();
- for(int i=;i<sz;i++)
- {
- v=g[u][i].second;
- w=g[u][i].first;
- if(d[v]>d[u]+w)
- {d[v]=d[u]+w;
- q.push(p(d[v],v));
- }
- }
- }
- }
- int main()
- {
- int i;
- cin>>t>>n;
- for(i=;i<n;i++)
- g[i].clear();
- for(i=;i<t;i++)
- {
- cin>>u>>v>>w;
- u--,v--;
- g[u].push_back(p(w,v));
- g[v].push_back(p(w,u));
- }
- dij();
- cout<<d[n-];
- }
//可以看出时空复杂度的明显差异
POJ2387(dijkstra堆优化)的更多相关文章
- POJ 2502 - Subway Dijkstra堆优化试水
做这道题的动机就是想练习一下堆的应用,顺便补一下好久没看的图论算法. Dijkstra算法概述 //从0出发的单源最短路 dis[][] = {INF} ReadMap(dis); for i = 0 ...
- Bzoj 2834: 回家的路 dijkstra,堆优化,分层图,最短路
2834: 回家的路 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 62 Solved: 38[Submit][Status][Discuss] D ...
- hdu 2544 单源最短路问题 dijkstra+堆优化模板
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 深入理解dijkstra+堆优化
深入理解dijkstra+堆优化 其实就这几种代码几种结构,记住了完全就可以举一反三,所以多记多练多优化多思考. Dijkstra 对于一个有向图或无向图,所有边权为正(边用邻接矩阵的形式给出), ...
- dijkstra堆优化(multiset实现->大大减小代码量)
例题: Time Limit: 1 second Memory Limit: 128 MB [问题描述] 在电视时代,没有多少人观看戏剧表演.Malidinesia古董喜剧演员意识到这一事实,他们想宣 ...
- POJ-2387.Til the Cows Come Home.(五种方法:Dijkstra + Dijkstra堆优化 + Bellman-Ford + SPFA + Floyd-Warshall)
昨天刚学习完最短路的算法,今天开始练题发现我是真的菜呀,居然能忘记邻接表是怎么写的,真的是菜的真实...... 为了弥补自己的菜,我决定这道题我就要用五种办法写出,并在Dijkstra算法堆优化中另外 ...
- dijkstra算法的应用(poj2387)+堆优化【还没学C艹很尴尬,不理解的先不写了,未完,待续...】
一题非常简单的最短路题目,但是我就是很撒比的错在了,1.初始化:2.判断重边 堆优化,使用优先队列的堆优化:复杂度:O(ElogE); #include <stdio.h> #includ ...
- POJ 1511 - Invitation Cards 邻接表 Dijkstra堆优化
昨天的题太水了,堆优化跑的不爽,今天换了一个题,1000000个点,1000000条边= = 试一试邻接表 写的过程中遇到了一些问题,由于习惯于把数据结构封装在 struct 里,结果 int [10 ...
- Dijkstra堆优化学习
最短路径例题 今天特地学习了Dijkstra的堆优化(主要是慕名已久). 我们需要一个堆来记录[编号,到编号这个点的最短路径值(当然只是当前的)] 与原来的Dijkstra操作基本一致,主要有以下几点 ...
随机推荐
- WordPress 新版本中编辑器不好用, 使用原有编辑器
将以下代码添加到当前主题的函数模板 functions.php 文件中即可. add_filter('use_block_editor_for_post', '__return_false'); re ...
- Python 利用字典实现类似 java switch case 功能
def add(): print('add') def sub(): print('sub') def exit(): print('exit') choice = { '1' : add, '2' ...
- JavaScript基础要点
一.值和类型及运算 JavaScript中的六种基本值类型 数字(number).字符串(string).布尔值(boolean).对象(object).函数(function).未定义类型(unde ...
- CSS格式化排版--排版
1.文字排版--字体:利用font-family设置字体,注意设置的字体必须是本地电脑中存在的字体. 例子:class="MicrosoftYahei"的h1标签的字体设置为 宋体 ...
- link标签链接CSS和@import加载的区别
link:基本语法 <link rel="stylesheet" href="路径"> @import 基本语法 <style> @im ...
- 排错-Loadrunner添加Windows Resource计数器提示“找不到网络路径”解决方法
Loadrunner添加Windows Resource计数器提示“找不到网络路径”解决方法 by:授客 QQ:1033553122 1.启动windows相关服务 win->services. ...
- loadrunner 场景设计-IP Spoofer-多ip负载生成器(Windows平台)
IP Spoofer-多ip负载生成器 by:授客 QQ:1033553122 1 适用协议 LoadRunner的多ip功能允许运行在单一负载生成器上的Vuser可以通过多ip被识别.服务器和路由 ...
- Cordova/Ionic开发的Android APP启用Chrome Inspect调试的方法
Cordova/Ionic开发的Android APP,需要启用WebView的调试模式,才可以在Chrome浏览器中输入chrome://Inspect,然后使用大家熟悉的开发者工具进行调试.不启用 ...
- (网页)JS去掉字符串前后空格或去掉所有空格的用法(转)
转自脚本之家: 这篇文章主要介绍了JS去掉字符串前后空格或去掉所有空格的用法,需要的朋友可以参考下: 代码如下: function Trim(str) { return str.replace(/(^ ...
- [20170705]diff比较执行结果的内容.txt
[20170705]diff比较执行结果的内容.txt --//有时候需要比较2个命令输出的结果进行比较,比较笨的方法如下,例子: $ lsnrctl status LISTENER_SCAN2 & ...