借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. DES加密和解密PHP,Java,ObjectC统一的方法

    原文:DES加密和解密PHP,Java,ObjectC统一的方法 PHP的加解密函数 <?php class DesComponent { var $key = '12345678'; func ...

  2. DevExpress.XtraReports.UI.XtraReport 动态报表

    原文:DevExpress.XtraReports.UI.XtraReport 动态报表 using System;using System.Collections.Generic;using Sys ...

  3. hdu 1700 Points on Cycle 水几何

    已知圆心(0,0)圆周上的一点,求圆周上另外两点使得三点构成等边三角形. 懒得推公式,直接用模板2圆(r1=dist,r2=sqrt(3)*dist)相交水过 #include<cstdio&g ...

  4. hdu4324 Triangle LOVE (拓扑排序)

    这是一道最简单的拓扑排序题,好久没看这个算法了! 有点生疏了! 后附上百度的资料; #include<stdio.h> #include<string.h> int in[50 ...

  5. Unity3D音频播放器 动态装载组件

    大多数在线Unity有关如何只教程Unity在播放音乐.之后如何通过拖动它们无法继续添加音频文件 但有时在游戏中的对象要玩几个声音.这时候我们就需要使用代码控制,拖动推教程AudioClip颂值的方法 ...

  6. FindBugs:Compiler output path for module can not be null. check your module/project settings问题原因

    这可能是很多人在使用Android studio 该插件会发现此错误信息:Compiler output path for module can not be null. check your mod ...

  7. Font-Awesome 体验 鼠标进入图标变大

    <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...

  8. MySQL存储引擎差异化实验

    本篇把MySQL最常用的存储引擎给大家做一个介绍,然后通过插入.修改和并发实验来了解和验证一下它们之间的一些差异. 一.MySQL存储引擎简介 存储引擎在MySQL结构里占据核心的位置,是上层抽象接口 ...

  9. LCD开发之汉字显示

    一.LCD显示原理 利用液晶制成的显示器称为LCD,根据驱动方式可分为静态驱动.简单矩阵驱动以及主动矩阵驱动3种.当中,简单矩阵型又可再细分扭转向列型(TN)和超扭转式向列型(STN)两种,而主动矩阵 ...

  10. 微信应用号开发知识贮备之Webpack实战

    天地会珠海分舵注:随着微信应用号的呼之欲出,相信新一轮的APP变革即将发生.作为行业内人士,我们很应该去拥抱这个趋势.这段时间在忙完工作之余准备储备一下这方面的知识点,以免将来被微信应用号的浪潮所淹没 ...