[USACO09OCT]热浪Heat Wave 洛谷 1339 最短路
2017-01-14 16:32
393 查看
题目大意
单源最短路···········分析
写dij就好了,但是
我写了dij+堆优化版本的。
学习了如何使用c++的优先队列。
ps:家里的键盘很恶心啊:f5、f7、f11太小了,按不到。
ps:c++的模板正在补全中。
code
//dij+堆优化版本 #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<string> #include<algorithm> #include<stack> #include<queue> #include<vector> using namespace std; struct arr{ int x,y,w,next; }edge[50000]; int ls[10000]; int dis[10000]; int v[10000]; int n,m,s,t; int edge_m; struct cmp{ bool operator ()(int a,int b){ return dis[a]>dis[b]; } }; //优先队列的定义。 void add(int x,int y,int w) { edge_m++; edge[edge_m]=(arr){x,y,w,ls[x]};ls[x]=edge_m; edge_m++; edge[edge_m]=(arr){y,x,w,ls[y]};ls[y]=edge_m; } int main() { scanf("%d%d%d%d",&n,&m,&s,&t); priority_queue<int,vector<int>,cmp> Q; memset(dis,63,sizeof(dis)); for (int i=1;i<=m;i++) { int x,y,w; scanf("%d%d%d",&x,&y,&w); add(x,y,w); } dis[s]=0; v[s]=1; Q.push(s); for (int ii=1;ii<=n;ii++) { int x=Q.top(); Q.pop(); for (int j=ls[x];j;j=edge[j].next) { if (dis[edge[j].y]>dis[x]+edge[j].w) { dis[edge[j].y]=dis[x]+edge[j].w; if (!v[edge[j].y]) { v[edge[j].y]=1; Q.push(edge[j].y); } } } } printf("%d",dis[t]); }
相关文章推荐
- 【洛谷1339 [USACO09OCT]】热浪Heat Wave 图论+最短路
- 洛谷 1339 [USACO09OCT]热浪Heat Wave 最短路
- SPFA基础模板 (洛谷1339 [USACO09OCT]热浪Heat Wave)
- 洛谷 1339_[USACO09OCT]热浪Heat Wave_Dijkstra
- 【洛谷1339】[USACO09OCT]热浪Heat Wave
- 洛谷P1339 [USACO09OCT]热浪Heat Wave(最短路)
- 【洛谷1339】[USACO09OCT]热浪Heat Wave spfa
- Dijkstra算法模版 洛谷P1339 [USACO09OCT]热浪Heat Wave
- 洛谷1339 热浪 最短路
- 洛谷1339 热浪(最短路模板)
- 洛谷 P1339 [USACO09OCT]热浪Heat Wave
- 洛谷 P1339 [USACO09OCT]热浪Heat Wave(用Dij)
- 洛谷1339 热浪(最短路模板)
- luogu P1339 [USACO09OCT]热浪Heat Wave
- 【洛谷 1339】【USACO 09 OCT】热浪 Heat Wave
- 洛谷 P1339 [USACO09OCT] 热浪Heat Wave
- 洛谷 1339 最短路
- 洛谷 1339 最短路
- 洛谷 1339 最短路
- 洛谷 P1339 [USACO09OCT]热浪Heat Wave