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

spfa:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int INF=100001;
const int maxm=10001,maxn=101; int n,m,x,y,w;
long long ans=0;
int a[maxm];
int dist[maxn];
bool vis[maxn];
struct edge{
int to,w;
edge(int _to,int _w){to=_to;w=_w;}
};
vector <edge> g[maxm]; void spfa(int x){
queue<int> q;
memset(dist,63,sizeof(dist));
memset(vis,false,sizeof(vis));
dist[x]=0;
vis[x]=1;
q.push(x); while(!q.empty()){
int u=q.front();
q.pop();
vis[u]=0;
int l=g[u].size();
for(int i=0;i<l;i++){
int v=g[u][i].to;
if(dist[v]>dist[u]+g[u][i].w){
dist[v]=dist[u]+g[u][i].w;
if(!vis[v]){
vis[v]=1;q.push(v);
}
}
}
}
} int main(){
freopen("data.in","r",stdin);
freopen("text.out","w",stdout);
//freopen("data.txt","r",stdin);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
scanf("%d",&w);
if(i!=j) g[i].push_back(edge(j,w));
}
for(int i=1;i<m;i++){
spfa(a[i]);
ans+=dist[a[i+1]];
}
cout<<ans;
return 0;
}

  

dijkstra+priority_queue:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int INF=100001;
const int maxm=10001,maxn=101; int n,m,x,y,w;
long long ans=0;
int a[maxm];
int dist[maxn];
struct edge{
int to,w;
edge(int _to,int _w){to=_to;w=_w;}
};
vector <edge> g[maxm];
typedef pair<int,int> P; void dijkstra(int x){
priority_queue< P , vector <P> , greater<P> > q;
memset(dist,63,sizeof(dist));
dist[x]=0;
q.push(P(0,x)); while(!q.empty()){
P u=q.top();
int x=u.second;
q.pop();
if(dist[x]<u.first) continue;
int l=g[x].size();
for(int i=0;i<l;i++){
int v=g[x][i].to;
if(dist[v]>dist[x]+g[x][i].w){
dist[v]=dist[x]+g[x][i].w;
q.push(P(dist[v],v));
}
}
}
} int main(){
freopen("danger.in","r",stdin);
freopen("danger.out","w",stdout);
//freopen("data.txt","r",stdin);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
scanf("%d",&w);
if(i!=j) g[i].push_back(edge(j,w));
}
for(int i=1;i<m;i++){
dijkstra(a[i]);
ans+=dist[a[i+1]];
}
cout<<ans;
return 0;
}

  
floyd:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<queue>
#include<stack>
#include<vector>
using namespace std;
int n,m,i,j,k,ans,f[102][102],a[10002];
int main(){
cin>>n>>m;
for(i=1;i<=m;i++)scanf("%d",&a[i]);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&f[i][j]);
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
for(i=2;i<=m;i++)ans+=f[a[i-1]][a[i]];
cout<<ans;
return 0;
}

  

最短路模板[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. 开始学习java

    .net 许久 看网络java猿飞计划,感觉成了少数类,学校为它,有多难不,有着vb,C,javascript和vs基金会,这并不是说一些语法和框架的熟悉做,搞两天,以一个开发环境,myeclipse ...

  2. warning: shared library text segment is not shareable

    warning: shared library text segment is not shareable error: treating warnings as errors 近期在调试一个Gsen ...

  3. linux后台server开发环境的部署配置和验证(nginx+apache+php-fpm+FASTCGI(C/C++))

    linux后台server开发环境部署配置 引言 背景 随着互联网业务的不断增多.开发环境变得越来越复杂,为了便于统一server端的开发部署环境,特制定本配置文档. 使用软件 CentOS 6.3( ...

  4. Android两个注意事项.深入了解Intent和IntentFilter(两)

    深入理解Intent和IntentFiler(二) 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空)     在上一篇文章中,我们比較具体学习了&q ...

  5. iOS开发- &quot;duplicate symbol for architecture i386&quot; 解决的方法

    今天整合项目的时候, 遇到了这样一个问题. duplicate symbol _flag in: /Users/apple/Library/Developer/Xcode/DerivedData/bl ...

  6. Go as continuous delivery tool for .NET

    http://simon-says-architecture.com/2014/02/28/go-as-continuous-delivery-tool-for-net/ Following my p ...

  7. SSAS系列——【05】多维数据(编程体系结构)

    原文:SSAS系列--[05]多维数据(编程体系结构) 1.什么是AMO? 翻译:AMO是SSAS中一个完整的管理类集合,它在Microsoft.AnalysisServices命名空间下,我们可以在 ...

  8. C# - Recommendations for Abstract Classes vs. Interfaces

     The choice of whether to design your functionality as an interface or an abstract class can somet ...

  9. 将已有的工程项目添加到Xcode到Git管理中

    在Xcode中创建工程的时候,我们很容易的可以将新创建的工程添加到Git中,如图: 但是如果是本地已经有的工程,那该如何添加到Git中呢? 首先终端进入到该工程的目录. 然后: git init gi ...

  10. javascritpt 原型链

    // 基类 var BaseCalculator = function(){ this.decimalDigits = 2; }; // public BaseCalculator.prototype ...