洛谷 1339 [USACO09OCT]热浪Heat Wave 最短路
2017-10-27 09:40
344 查看
题目:
https://www.luogu.org/problem/show?pid=1339
忘记迪杰斯特拉怎么打了;
重新思考……
思考:
个人认为dijkstra本质是一个bfs,当每一层的点扩展完后,再到下一层;
所以说,这是bfs求最短路的优化?
对于”每一层”节点,距离起点最小的点的最短路已经确定,不会存在更短的路了,如果存在更短的,它早就被更新了,不会现在才更新;
注意同一个点可能会被入堆多次;
https://www.luogu.org/problem/show?pid=1339
忘记迪杰斯特拉怎么打了;
重新思考……
思考:
个人认为dijkstra本质是一个bfs,当每一层的点扩展完后,再到下一层;
所以说,这是bfs求最短路的优化?
对于”每一层”节点,距离起点最小的点的最短路已经确定,不会存在更短的路了,如果存在更短的,它早就被更新了,不会现在才更新;
注意同一个点可能会被入堆多次;
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<queue> using namespace std; const int MAXN=100001; int n,m,tot,sx,sy; int dis[MAXN],nxt[MAXN],fst[MAXN]; bool vis[MAXN]; struct hh { int num,dis; }a[MAXN]; struct sh { int from,to,cost; }ma[MAXN]; priority_queue<hh>q; bool operator < (hh a,hh b) { return a.dis > b.dis; } void build(int f,int t,int c) { tot++; ma[tot]=(sh){f,t,c}; nxt[tot]=fst[f]; fst[f]=tot; return; } void init() { memset(dis,0x7f,sizeof(dis)); memset(vis,0,sizeof(vis)); return; } void Dijkstra() { init(); q.push((hh){sx,0}); dis[sx]=0; while(!q.empty()) { hh u=q.top(); q.pop(); if(vis[u.num]) continue; vis[u.num]=1; for(int i=fst[u.num];i;i=nxt[i]) { int v=ma[i].to; if(dis[v]>dis[u.num]+ma[i].cost) { dis[v]=dis[u.num]+ma[i].cost; q.push((hh){v,dis[v]}); } } } return; } void solve() { scanf("%d%d%d%d",&n,&m,&sx,&sy); for(int i=1;i<=m;i++) { int x,y,c; scanf("%d%d%d",&x,&y,&c); build(x,y,c); build(y,x,c); } Dijkstra(); cout<<dis[sy]; return; } int main() { solve(); return 0; }
相关文章推荐
- [USACO09OCT]热浪Heat Wave 洛谷 1339 最短路
- 【洛谷1339 [USACO09OCT]】热浪Heat Wave 图论+最短路
- 【洛谷1339】[USACO09OCT]热浪Heat Wave spfa
- SPFA基础模板 (洛谷1339 [USACO09OCT]热浪Heat Wave)
- 洛谷 1339_[USACO09OCT]热浪Heat Wave_Dijkstra
- 洛谷P1339 [USACO09OCT]热浪Heat Wave(最短路)
- 【洛谷1339】[USACO09OCT]热浪Heat Wave
- luogu P1339 [USACO09OCT]热浪Heat Wave
- 【洛谷 1339】【USACO 09 OCT】热浪 Heat Wave
- 洛谷 P1339 [USACO09OCT] 热浪Heat Wave
- Dijkstra算法模版 洛谷P1339 [USACO09OCT]热浪Heat Wave
- 洛谷1339 热浪 最短路
- 洛谷1339 热浪(最短路模板)
- 洛谷1339 热浪(最短路模板)
- 洛谷 P1339 [USACO09OCT]热浪Heat Wave
- 洛谷 P1339 [USACO09OCT]热浪Heat Wave(用Dij)
- 洛谷 1339 最短路
- P1339 [USACO09OCT]热浪Heat Wave
- 洛谷 1339 最短路
- 洛谷 1339 最短路