借bzoj1624练了一下模板(虽然正解只是floyd)

spfa:

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. #include <iostream>
  5. #include <vector>
  6. #include <queue>
  7. using namespace std;
  8. const int INF=100001;
  9. const int maxm=10001,maxn=101;
  10.  
  11. int n,m,x,y,w;
  12. long long ans=0;
  13. int a[maxm];
  14. int dist[maxn];
  15. bool vis[maxn];
  16. struct edge{
  17. int to,w;
  18. edge(int _to,int _w){to=_to;w=_w;}
  19. };
  20. vector <edge> g[maxm];
  21.  
  22. void spfa(int x){
  23. queue<int> q;
  24. memset(dist,63,sizeof(dist));
  25. memset(vis,false,sizeof(vis));
  26. dist[x]=0;
  27. vis[x]=1;
  28. q.push(x);
  29.  
  30. while(!q.empty()){
  31. int u=q.front();
  32. q.pop();
  33. vis[u]=0;
  34. int l=g[u].size();
  35. for(int i=0;i<l;i++){
  36. int v=g[u][i].to;
  37. if(dist[v]>dist[u]+g[u][i].w){
  38. dist[v]=dist[u]+g[u][i].w;
  39. if(!vis[v]){
  40. vis[v]=1;q.push(v);
  41. }
  42. }
  43. }
  44. }
  45. }
  46.  
  47. int main(){
  48. freopen("data.in","r",stdin);
  49. freopen("text.out","w",stdout);
  50. //freopen("data.txt","r",stdin);
  51. scanf("%d%d",&n,&m);
  52. for(int i=1;i<=m;i++) scanf("%d",&a[i]);
  53. for(int i=1;i<=n;i++)
  54. for(int j=1;j<=n;j++){
  55. scanf("%d",&w);
  56. if(i!=j) g[i].push_back(edge(j,w));
  57. }
  58. for(int i=1;i<m;i++){
  59. spfa(a[i]);
  60. ans+=dist[a[i+1]];
  61. }
  62. cout<<ans;
  63. return 0;
  64. }

  

dijkstra+priority_queue:

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. #include <iostream>
  5. #include <vector>
  6. #include <queue>
  7. using namespace std;
  8. const int INF=100001;
  9. const int maxm=10001,maxn=101;
  10.  
  11. int n,m,x,y,w;
  12. long long ans=0;
  13. int a[maxm];
  14. int dist[maxn];
  15. struct edge{
  16. int to,w;
  17. edge(int _to,int _w){to=_to;w=_w;}
  18. };
  19. vector <edge> g[maxm];
  20. typedef pair<int,int> P;
  21.  
  22. void dijkstra(int x){
  23. priority_queue< P , vector <P> , greater<P> > q;
  24. memset(dist,63,sizeof(dist));
  25. dist[x]=0;
  26. q.push(P(0,x));
  27.  
  28. while(!q.empty()){
  29. P u=q.top();
  30. int x=u.second;
  31. q.pop();
  32. if(dist[x]<u.first) continue;
  33. int l=g[x].size();
  34. for(int i=0;i<l;i++){
  35. int v=g[x][i].to;
  36. if(dist[v]>dist[x]+g[x][i].w){
  37. dist[v]=dist[x]+g[x][i].w;
  38. q.push(P(dist[v],v));
  39. }
  40. }
  41. }
  42. }
  43.  
  44. int main(){
  45. freopen("danger.in","r",stdin);
  46. freopen("danger.out","w",stdout);
  47. //freopen("data.txt","r",stdin);
  48. scanf("%d%d",&n,&m);
  49. for(int i=1;i<=m;i++) scanf("%d",&a[i]);
  50. for(int i=1;i<=n;i++)
  51. for(int j=1;j<=n;j++){
  52. scanf("%d",&w);
  53. if(i!=j) g[i].push_back(edge(j,w));
  54. }
  55. for(int i=1;i<m;i++){
  56. dijkstra(a[i]);
  57. ans+=dist[a[i+1]];
  58. }
  59. cout<<ans;
  60. return 0;
  61. }

  
floyd:

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<cmath>
  5. #include<cstring>
  6. #include<string>
  7. #include<queue>
  8. #include<stack>
  9. #include<vector>
  10. using namespace std;
  11. int n,m,i,j,k,ans,f[102][102],a[10002];
  12. int main(){
  13. cin>>n>>m;
  14. for(i=1;i<=m;i++)scanf("%d",&a[i]);
  15. for(i=1;i<=n;i++)
  16. for(j=1;j<=n;j++)
  17. scanf("%d",&f[i][j]);
  18. for(k=1;k<=n;k++)
  19. for(i=1;i<=n;i++)
  20. for(j=1;j<=n;j++)
  21. f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
  22. for(i=2;i<=m;i++)ans+=f[a[i-1]][a[i]];
  23. cout<<ans;
  24. return 0;
  25. }

  

最短路模板[spfa][dijkstra+堆优化][floyd]的更多相关文章

  1. 单源最短路模板_SPFA_Dijkstra(堆优化)_C++

    随手一打就是标准的SPFA,默认1号节点为出发点,当然不用 f 判断是否在队里也可以,只是这样更优化一点 void spfa() { int i,x,k; ;i<=n;i++) { d[i]=o ...

  2. hdu 2544 单源最短路问题 dijkstra+堆优化模板

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  3. Bzoj 2834: 回家的路 dijkstra,堆优化,分层图,最短路

    2834: 回家的路 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 62  Solved: 38[Submit][Status][Discuss] D ...

  4. PAT-1030 Travel Plan (30 分) 最短路最小边权 堆优化dijkstra+DFS

    PAT 1030 最短路最小边权 堆优化dijkstra+DFS 1030 Travel Plan (30 分) A traveler's map gives the distances betwee ...

  5. 深入理解dijkstra+堆优化

    深入理解dijkstra+堆优化 其实就这几种代码几种结构,记住了完全就可以举一反三,所以多记多练多优化多思考. Dijkstra   对于一个有向图或无向图,所有边权为正(边用邻接矩阵的形式给出), ...

  6. dijkstra堆优化(multiset实现->大大减小代码量)

    例题: Time Limit: 1 second Memory Limit: 128 MB [问题描述] 在电视时代,没有多少人观看戏剧表演.Malidinesia古董喜剧演员意识到这一事实,他们想宣 ...

  7. POJ 2502 - Subway Dijkstra堆优化试水

    做这道题的动机就是想练习一下堆的应用,顺便补一下好久没看的图论算法. Dijkstra算法概述 //从0出发的单源最短路 dis[][] = {INF} ReadMap(dis); for i = 0 ...

  8. POJ2387(dijkstra堆优化)

    Til the Cows Come Home Bessie is out in the field and wants to get back to the barn to get as much s ...

  9. 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)

    关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...

随机推荐

  1. 使用C#或javascript将Table里的数据导出到Excel

    原文:使用C#或javascript将Table里的数据导出到Excel Demo效果图: 用C#将Table数据导出Excel: 本方法已经将导出excel做成分部视图,引用时只需在视图中使用如下代 ...

  2. /proc/mtd 各参数的含义 -- linux内核

    经/proc虚拟文件系统读取MTD分区表:cat /proc/mtd mtd .name = raspi, .size = 0x00400000 (4M) .erasesize = 0x0001000 ...

  3. HBase加Solr

    HBase加Solr 如何解决分布式系统数据事务一致性问题 (HBase加Solr) 摘要:对于所有的分布式系统,我想事务一致性问题是极其非常重要的问题,因为它直接影响到系统的可用性.本文以下所述所要 ...

  4. 大数据系列修炼-Scala课程10

    今天主要是关于Scala中对List的相关操作,list在Scala中应该是至关重要,接下来会讲解关于List的一系列操作 List的map.flatMap.foreach.filter操作讲解 1. ...

  5. 第23章 访问者模式(Visitor Pattern)

    原文 第23章 访问者模式(Visitor Pattern) 访问者模式 导读:访问者模式是我个人认为所有行为模式中最为复杂的一种模式了,这个模式可能看一遍会看不懂,我也翻了好几个例子,依然不能很好的 ...

  6. Jquery学习(三)选择

    1.Jquery最重要的是选择. 学习要点:        1.简单选择器        2.进阶选择器        3.高级选择器 ①简单选择器. 最简单的也就是最经常使用的,最经常使用的一般也是 ...

  7. NYoj WAJUEJI which home strong!(简单搜索)

    题目链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=1100 这道题,自己初写搜索,给学长气的只打我,Orz....... 搜索的思路要理 ...

  8. .net设计模式之装饰模式

    概述: 装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 装饰模式的特点: (1) 装饰对象和真实对象有相同的接口.这样 ...

  9. js 正则练习之语法高亮

    原文:js 正则练习之语法高亮 学了几天正则,差不多该总结整理写成果了,之前就想写语法高亮匹配来着,不过水平不够,看着例子都不理解.今天就分析下 次碳酸钴 和 Barret Lee 语法高亮实现. 先 ...

  10. NSString 常用分类

    #pragma mark 清空字符串中的空白字符 - (NSString *)trimString { return [self stringByTrimmingCharactersInSet:[NS ...