最短路模板[spfa][dijkstra+堆优化][floyd]
借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]的更多相关文章
- 单源最短路模板_SPFA_Dijkstra(堆优化)_C++
随手一打就是标准的SPFA,默认1号节点为出发点,当然不用 f 判断是否在队里也可以,只是这样更优化一点 void spfa() { int i,x,k; ;i<=n;i++) { d[i]=o ...
- hdu 2544 单源最短路问题 dijkstra+堆优化模板
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- Bzoj 2834: 回家的路 dijkstra,堆优化,分层图,最短路
2834: 回家的路 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 62 Solved: 38[Submit][Status][Discuss] D ...
- PAT-1030 Travel Plan (30 分) 最短路最小边权 堆优化dijkstra+DFS
PAT 1030 最短路最小边权 堆优化dijkstra+DFS 1030 Travel Plan (30 分) A traveler's map gives the distances betwee ...
- 深入理解dijkstra+堆优化
深入理解dijkstra+堆优化 其实就这几种代码几种结构,记住了完全就可以举一反三,所以多记多练多优化多思考. Dijkstra 对于一个有向图或无向图,所有边权为正(边用邻接矩阵的形式给出), ...
- dijkstra堆优化(multiset实现->大大减小代码量)
例题: Time Limit: 1 second Memory Limit: 128 MB [问题描述] 在电视时代,没有多少人观看戏剧表演.Malidinesia古董喜剧演员意识到这一事实,他们想宣 ...
- POJ 2502 - Subway Dijkstra堆优化试水
做这道题的动机就是想练习一下堆的应用,顺便补一下好久没看的图论算法. Dijkstra算法概述 //从0出发的单源最短路 dis[][] = {INF} ReadMap(dis); for i = 0 ...
- 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 ...
- 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...
随机推荐
- Serverlet具体解释
Serverlet简单介绍: Servlet(Server Applet),全称Java Servlet,未有中文译文.是用Java编写的server端程序.其主要功能在于交互式地浏览和改动数据,生成 ...
- Kd-Tree算法原理和开源实现代码
本文介绍一种用于高维空间中的高速近期邻和近似近期邻查找技术--Kd-Tree(Kd树). Kd-Tree,即K-dimensional tree,是一种高维索引树形数据结构,经常使用于在大规模的高维数 ...
- jquery插件之DataTables 参数介绍
DataTables(http://www.datatables.net/)应该是我到目前为止见过的,功能最强大的表格解决方案(当然,不计算其它整套框架中的table控件在内). 先把它主页上写的特性 ...
- crawler_爬虫_反爬虫策略
关于反爬虫和恶意攻击的一些策略和思路 有时网站经常受到恶意spider攻击,疯狂抓取网站内容,对网站性能有较大影响. 下面我说说一些反恶意spider和spam的策略和思路. 1. 通过日志分析来 ...
- 房间计费系统改造E-R图纸设计
简单的学习过程: 这几天忙得太混乱了,用了近一个星期才设计好.我在这段时间遇到的困难,就积极找师哥师姐指点迷津,如今多少总算是有些拿得出手的成果. 学习成果: Entity Relations ...
- C#二维码生成与解码
[窗体效果图] [程序源代码] using System; using System.Collections.Generic; using System.ComponentModel; using S ...
- The Swift Programming Language-官方教程精译Swift(2)基础知识
Swift 的类型是在 C 和 Objective-C 的基础上提出的,Int是整型:Double和Float是浮点型:Bool是布尔型:String是字符串.Swift 还有两个有用的集合类型,Ar ...
- windows下用c实现Socket通信
原文:windows下用c实现Socket通信 原本以为c是跨平台,所以,c在windows下和linux下的程序应该是类似于Java,什么都不用改变的,今儿才恍然大悟,他们的类库不一样啊-- 下面我 ...
- 使用C/C++发展Web系统开源
下载 见 C++开发的论坛系统 - BBS 下载地址:Fetch_source_code_release_vse2008_v1.2.1.7z 眼下先暂存在百度云上,最近会放入github 当前版本号的 ...
- centos安装zabbix集群监控(亲测无坑版)
一. 安装lemp环境 下载安装包:wget bbs.linuxtone.org/docs/autoinstall/lemp_auto_v1.0.6.tar.gz 包解压:tar zxvf lemp_ ...