HDU 2544 最短路 (最短路,spfa)
题意:中文题目
思路:spfa+SLF优化。关于SPFA的详情请戳我
#include <bits/stdc++.h>
using namespace std;
const int N=, INF=0x7f7f7f7f;
int n, m;
bool vis[N]; //标记是否在队列中
int dest[N]; //路径长度
int mapp[N][N]; int spfa(int s, int e) //求最短路径
{
memset(dest,0x7f,sizeof(dest));
dest[s]=;
vis[s]=;
deque<int> que;
que.push_back(s);
while(!que.empty())
{
int tmp=que.front();
que.pop_front();
vis[tmp]=;
for(int i=; i<=n; i++)
{
if(mapp[tmp][i] && dest[tmp]+mapp[tmp][i]<dest[i] )
{
dest[i]=dest[tmp]+mapp[tmp][i];
if(!vis[i]) //一旦被更新,必须进队列
{
vis[i]=;
if(que.empty()) que.push_back(i); //SLF优化,路短的优先放前面
else
{
if(dest[que.front()]>dest[i])
que.push_front(i);
else
que.push_back(i);
}
}
}
}
}
return dest[e];
} int main()
{
//freopen("input.txt", "r", stdin);
int a, b, c;
while(scanf("%d%d", &n, &m), n+m)
{
memset(vis,,sizeof(vis));
memset(mapp,,sizeof(mapp)); for(int i=; i<m; i++)
{
scanf("%d%d%d",&a,&b,&c);
mapp[a][b]=mapp[b][a]=c;
}
printf("%d\n",spfa(,n));
} return ;
}
AC代码
Dijkstra
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int N=+;
const int INF=0x7f7f7f7f; int g[N][N];
int vis[N];
int dist[N]; int dijkstra(int n)
{
memset(vis,,sizeof(vis));
memset(dist,0x7f,sizeof(dist));
dist[]=;
for(int i=; i<=n; i++) //每次用1个点来更新到其他点的距离
{
int flag, small=INF;
for(int j=; j<=n; j++)//找距离最小的点
{
if(!vis[j]&&dist[j]<=small)
{
small=dist[j];
flag=j;
}
}
vis[flag]=;//标记,不需要再用其更新别人。
for(int j=; j<=n; j++)//有边相连就得更新
{
if(g[j][flag])
dist[j]=min(dist[flag]+g[flag][j], dist[j]);
}
}
return dist[n];
} int main()
{
freopen("input.txt", "r", stdin);
int n, m, a, b, w;
while(scanf("%d%d",&n, &m), n+m)
{
memset(g,,sizeof(g));
for(int i=; i<m; i++)
{
scanf("%d%d%d",&a,&b,&w);
g[a][b]=g[b][a]=w;
}
cout<<dijkstra(n)<<endl;
}
return ;
}
AC代码
HDU 2544 最短路 (最短路,spfa)的更多相关文章
- HDU 2544 单源最短路
题目链接: 传送门 最短路 Time Limit: 1000MS Memory Limit: 65536K 题目描述 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是 ...
- HDU 2544(简单最短路)
http://acm.hdu.edu.cn/showproblem.php?pid=2544 /* 使用pair代替结构 */ #include <iostream> #include & ...
- 单源最短路模板 + hdu - 2544
Floyd Floyd 本质上类似一种动态规划,dp [ i ] [ j ] = dp [ i ] [ k ] + dp[ k ] [ j ]. /** * Night gathers, and no ...
- ACM: HDU 2544 最短路-Dijkstra算法
HDU 2544最短路 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descrip ...
- UESTC 30 &&HDU 2544最短路【Floyd求解裸题】
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 2544 最短路 【Dijkstra模板题】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2544 思路:最短路的模板题 Dijkstra 算法是一种类似于贪心的算法,步骤如下: 1.当到一个点时, ...
- HDU - 2544最短路 (dijkstra算法)
HDU - 2544最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以 ...
- (重刷)HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,dijkstra解法。
floyd解法 今天初看dijkstra,先拿这两题练手,其他变形题还是不是很懂. 模版题,纯练打字... HDU 1874: #include <cstdio> #define MAXN ...
- UESTC - 1987 童心未泯的帆宝和乐爷 (第k短路 A*算法+SPFA算法 模板)
传送门: http://www.qscoj.cn/#/problem/show/1987 童心未泯的帆宝和乐爷 Edit Time Limit: 10000 MS Memory Limit: ...
- hdu 2544 hdu 1874 poj 2387 Dijkstra 模板题
hdu 2544 求点1到点n的最短路 无向图 Sample Input2 1 //结点数 边数1 2 3 //u v w3 31 2 52 3 53 1 20 0 Sample Output32 ...
随机推荐
- hihocoder #1301 : 筑地市场 数位dp+二分
题目链接: http://hihocoder.com/problemset/problem/1301?sid=804672 题解: 二分答案,每次判断用数位dp做. #include<iostr ...
- Maven--(一个坑)在settings.xml文件中添加mirrors导致无法新建Maven项目
这是用新电脑第一次创建Maven项目--当然是一个测试项目.已经差不多忘了该怎样做,所以参考我的博客:http://www.cnblogs.com/wql025/p/4996486.html,这应该是 ...
- oracle中行转列函数
一.问题描述 有时在“相关子查询中”需要查询某个实体类对应的某个字段有多个值,如果不做行专列查询,会提示返回多个列的错误.例如: 如上图所示,一个组合包,可能对应多个产品,需要你将所对应的多个产品都放 ...
- 找不到对应的webservice配置参数[ProcessService]
在UI端 保存时 界面显示无法保存 且报此错误 “找不到对应的webservice配置参数[ProcessService]” 此下为解决方法: 首先 在[应用管理平台]--[参数模板设置] 找到你的参 ...
- Unity3D脚本中文系列教程(四)
http://dong2008hong.blog.163.com/blog/static/4696882720140302451146/ Unity3D脚本中文系列教程(三) 送到动画事件. ◆ va ...
- Chp18: Hard
18.1 Write a function that adds two numbers. You should not use + or any arithmetic operators. Solut ...
- StringBuffer 和 StringBuilder
如果你读过<Think in Java>,而且对里面描述HashTable和HashMap区别的那部分章节比较熟悉的话,你一定也明白了原因所在.对,就是支持线程同步保证线程安全而导致性能下 ...
- .NET framework 4.0安装失败怎么办
开始——运行——输入cmd——回车——在打开的窗口中输入net stop WuAuServ 开始——运行——输入%windir%找到有个叫SoftwareDistribution的文件夹,把它重命 ...
- BFS 模板
转自:欣哥 下面是bfs一般的形式,谈不上模板但一般都这么来做有点乱有什么多交流 bfs一般用于求最短时间 #include<stdio.h>#include<queue>us ...
- lintcode:子数组之和为0
题目: 子数组之和 给定一个整数数组,找到和为零的子数组.你的代码应该返回满足要求的子数组的起始位置和结束位置 样例 给出[-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3]. 解 ...