hiho(1081),SPFA最短路,(非主流写法)
题目链接:http://hihocoder.com/problemset/problem/1081
SPFA求最短路,是不应-羁绊大神教我的,附上头像。
我第一次写SPFA,我用的vector存邻接表,以后也会保持这种习惯。每个元素是一个pair类型,分别表示可连接的点,和权值。
SPFA:把起点放到队列,扫一遍可以链接的点,每一次松弛条件是:dist[next.first] = min(dist[next.first],dist[f]+next.second);就是说J—>S或者J—>K—>S;把没有访问过的点再次放到队列中去,继续更新没有访问的点,直至结束。
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <iomanip>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <string>
#include <queue>
#include <map>
#include <cmath> using namespace std; typedef pair<int,int> pii; int spfa(vector<vector<pii> >& vadj, int nv, int sbeg, int send)
{
int dist[nv];
int a; for(a=;a<nv;++a)
dist[a]=;
dist[sbeg]=; bool vis[nv];
memset(vis,,sizeof(vis));
vis[sbeg]=true; queue<int>Q;
Q.push(sbeg); int ifrt;
pii next; while(Q.size())
{
ifrt=Q.front();
Q.pop();
vis[ifrt]=false; for(a=;a<vadj[ifrt].size();++a)
{
next=vadj[ifrt][a];
if(dist[next.first]>dist[ifrt]+next.second)
{
dist[next.first]=dist[ifrt]+next.second;
if(!vis[next.first])
{
Q.push(next.first);
vis[next.first]=true;
}
}
}
} return dist[send];
} int main()
{
int nv,ne;
int ibeg,iend;
int sa,sb,sd;
int a; cin>>nv>>ne;
cin>>ibeg>>iend; --ibeg;
--iend; vector<vector<pii> > vadj(nv); for(a=;a<ne;++a)
{
scanf("%d %d %d",&sa,&sb,&sd);
--sa;
--sb;
vadj[sa].push_back(make_pair(sb,sd));
vadj[sb].push_back(make_pair(sa,sd));
} cout<<spfa(vadj,nv,ibeg,iend)<<endl; return ;
}
hiho(1081),SPFA最短路,(非主流写法)的更多相关文章
- NOIP2013 华容道 (棋盘建图+spfa最短路)
#include <cstdio> #include <algorithm> #include <cstring> #include <queue> # ...
- poj1502 spfa最短路
//Accepted 320 KB 16 ms //有n个顶点,边权用A表示 //给出下三角矩阵,求从一号顶点出发到各点的最短路的最大值 #include <cstdio> #includ ...
- Poj(2679),SPFA,邻接表(主流写法)
题目链接:http://poj.org/problem?id=3268 题意: 有编号为1-N的牛,它们之间存在一些单向的路径.给定一头牛的编号,其他牛要去拜访它并且拜访完之后要返回自己原来的位置,求 ...
- hdu 5545 The Battle of Guandu spfa最短路
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5545 题意:有N个村庄, M 个战场: $ 1 <=N,M <= 10^5 $; 其中曹 ...
- HNU 13375 Flowery Trails (spfa最短路)
求最短路径覆盖的全部边权值和. 思路:分别从起点和终点两次求最短路,再比较两个点到起点的距离和他们之间的权值相加和是否等于最短路径. 这题很好 #include <cstring> #in ...
- poj 1847 Tram【spfa最短路】
Tram Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 12005 Accepted: 4365 Description ...
- BZOJ 1003 物流运输 (动态规划 SPFA 最短路)
1003: [ZJOI2006]物流运输 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 5590 Solved: 2293 [Submit][Stat ...
- POJ - 1062(昂贵的聘礼)(有限制的spfa最短路)
题意:...中文题... 昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 54350 Accepted: 16 ...
- POJ 1556 - The Doors - [平面几何+建图spfa最短路]
题目链接:http://poj.org/problem?id=1556 Time Limit: 1000MS Memory Limit: 10000K Description You are to f ...
随机推荐
- gcc 错误:Fatal error error writing to tmp No space left on device
在使用gcc make时报错:Fatal error error writing to tmp No space left on device finiteVolume/ddtSchemes/Eule ...
- dij最短路优先队列堆的时候,加边
不能用全局数组d[u]>d[rhs.u]. 这样后面会修改d[u]值然而本来里面的点顺序不该修改,却被修改了. 应该用栈还存进去的临时变量,比如d>rhs.d. 优先队列重载小于号'< ...
- 树形DP+RMQ+单调队列(Bob’s Race HDU4123)
题意:有n个房子,这些房子被n-1条道路连接,有一些运动员从一个房子为起点尽可能跑最远的距离且不能通过一条道路超过两次,这些运行员不能选择同样的起点,这些运动员跑的最远距离和最近距离的差值不能超过Q, ...
- Python学习总结15:时间模块datetime & time & calendar (二)
二 .datetime模块 1. datetime中常量 1)datetime.MINYEAR,表示datetime所能表示的最小年份,MINYEAR = 1. 2)datetime.MAXYEAR ...
- SQL中索引的原理
(一)深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引 ...
- 每天一个liunx命令(ubuntu)
解压XXX.gz到另一个A文化夹: 1.切换到root权限 su 2.tar -zxvf XXX.gz -C A 注意: C要大些因为ubuntu区分大小写
- jsp页面中的java代码
jsp页面中的java代码 1.jsp表达式 <%= ....%> 只能放置一个变量常量 2. jsp小脚本 <% .... %> java语句,可以插入一些语句 3. ...
- HDU 3308 LCIS(线段树)
Problem Description Given n integers.You have two operations:U A B: replace the Ath number by B. (in ...
- php session session_set_save_handler 接管所有的session管理工作
一个已知管用的方法是,使用session_set_save_handler,接管所有的session管理工作,一般是把session信息存储到数 据库,这样可以通过SQL语句来删除所有过期的sessi ...
- Fresco源码解析 - 创建一个ImagePipeline(一)
在Fresco源码解析 - 初始化过程分析章节中, 我们分析了Fresco的初始化过程,两个initialize方法中都用到了 ImagePipelineFactory类. ImagePipeline ...