这么naive的题面一看就是最短路模板题~~~

ok。首先是floyd算法,tts,记得把k放在最外面就行了。

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int a[][];
int main()
{
int m,n,c,b;
memset(a,0x3f,sizeof(a));
scanf ("%d%d%d%d",&n,&m,&c,&b);
int x,y,z;
while(m--)
{
scanf ("%d%d%d",&x,&y,&z);
a[x][y]=z;
a[y][x]=z;
}
for(int k=;k<=n;k++)
{
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
}
}
}
printf("%d",a[c][b]);
return ;
}

Floyd

没有任何的参考价值,除非你要做多源最短路径(☺)

next,SPFA算法,最短路径更快算法(☺),shortest path faster algorithm

思想是这样的:从起点开始入队,然后每次取出一个点,消除标记,轮边松弛。

对于松弛了的边,如果在队中就不用管。否则入队+标记。

然后就能很naive的输出答案了!

注意:当一个点进队超过n次就有负环。

十分规范的模板。

 #include <cstdio>
#include <queue>
using namespace std;
const int N = ;
int n,top;
struct Edge
{
int u,v,len,next,num;
}edge[N];
struct Point
{
int dis=0x3f3f3f3f,e,c,num;
bool vis;
}point[N]; bool spfa(int k)
{
queue<int>p;
point[k].vis=;
point[k].c++;
point[k].dis=;
p.push(k);
int op,ed,i;
while(!p.empty())
{
op=p.front();
p.pop();
point[op].vis=;
i=point[op].e;
while(i)
{
ed=edge[i].v;
if(point[ed].dis>point[op].dis+edge[i].len)
{
point[ed].dis=point[op].dis+edge[i].len;
if(point[ed].vis) continue;
point[ed].vis=;
p.push(ed);
point[ed].c++;
if(point[ed].c>n) return ;
}
i=edge[i].next;
}
}
return true;
}
void add(int x,int y,int z)
{
top++;
edge[top].u=x;
edge[top].v=y;
edge[top].len=z;
edge[top].num=top;
edge[top].next=point[x].e;
point[x].e=top;
return;
}
int main()
{
int m,a,b;
scanf ("%d%d%d%d",&n,&m,&a,&b);
for(int i=;i<=n;i++) point[i].num=i;
int x,y,z;
for(int i=;i<=m;i++)
{
scanf ("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
if(!spfa(a)) printf("-1");
else printf("%d",point[b].dis);
return ;
}

SPFA spfa

接下来是稠密图上的dijkstra算法,di jk s tra(☺)

思想:来个优先队列,dis小的点先出。

起点入队,然后每次取出一个未标记的点标记已读,然后轮边。

如果终点被标记就continue,记得更新i。否则松弛一下,不管有没有成功都入队。

今天刚打的代码,也很规范。

(缺点:边权不能为负)

 #include <cstdio>
#include <queue>
using namespace std;
const int N = ;
int top;
struct Edge
{
int u,v,len,next,num;
}edge[N];
struct Point
{
int e,dis=0x3f3f3f3f,c,num;
bool vis;
bool operator < (const Point &a) const
{
return this->dis > a.dis;
}
}point[N]; void dijkstra(int k)
{
priority_queue<Point>p;
p.push(point[k]);
point[k].vis=;
point[k].dis=;
int op,ed,i;
while(!p.empty())
{
while((!p.empty())&&(p.top().vis)) p.pop();
if(p.empty()) break;
op=p.top().num;
p.pop();
point[op].vis=;
i=point[op].e;
while(i)
{
ed=edge[i].v;
if(point[ed].vis) {i=edge[i].next;continue;}
if(point[ed].dis>point[op].dis+edge[i].len) point[ed].dis=point[op].dis+edge[i].len;
p.push(point[ed]);
i=edge[i].next;
}
}
return;
} void add(int x,int y,int z)
{
top++;
edge[top].u=x;
edge[top].v=y;
edge[top].len=z;
edge[top].num=top;
edge[top].next=point[x].e;
point[x].e=top;
return;
}
int main()
{
int m,n,a,b;
scanf ("%d%d%d%d",&n,&m,&a,&b);
int x,y,z;
for(int i=;i<=n;i++) point[i].num=i;
while(m--)
{
scanf ("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
dijkstra(a);
printf("%d",point[b].dis);
return ;
}

Dijkstra

That's all,thanks for watching.

P1339 热浪 最短路径模板题的更多相关文章

  1. HDU 2544 最短路(模板题)

    求1到N的最短路径,模板题,以1为源点,用dijkstra算法(可以用优先级队列优化) #include <iostream> #include <algorithm> #in ...

  2. HDU-1874 畅通工程续 (最短路径启蒙题)

    hdu 1874比较基础,拿来练各种刚学会的算法比较好,可以避免好多陷阱,典型的最短路模板题 畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memor ...

  3. 动态树LCT(Link-cut-tree)总结+模板题+各种题目

    一.理解LCT的工作原理 先看一道例题: 让你维护一棵给定的树,需要支持下面两种操作: Change x val:  令x点的点权变为val Query x y:  计算x,y之间的唯一的最短路径的点 ...

  4. 洛谷P1339 热浪

    P1339 热浪 529通过 1.3K提交 题目提供者yeszy 标签图论福建省历届夏令营 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 求助...为什么是未知错误… 求修正,貌似死循环 第 ...

  5. [poj2449]Remmarguts' Date(K短路模板题,A*算法)

    解题关键:k短路模板题,A*算法解决. #include<cstdio> #include<cstring> #include<algorithm> #includ ...

  6. HDU-2544 最短路 Dijkstra模板题

    题目链接:https://vjudge.net/problem/HDU-2544 题意: 题目要求找到节点1到节点n之间的一条最短路 分析: Dijkstra模板题 单源最短路径,可以用dijkstr ...

  7. [AHOI 2009] 维护序列(线段树模板题)

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...

  8. HDU 2222 AC自动机模板题

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=2222 AC自动机模板题 我现在对AC自动机的理解还一般,就贴一下我参考学习的两篇博客的链接: http: ...

  9. POJ2774 & 后缀数组模板题

    题意: 求两个字符串的LCP SOL: 模板题.连一起搞一搞就好了...主要是记录一下做(sha)题(bi)过程心(cao)得(dan)体(xin)会(qing) 后缀数组概念...还算是简单的,过程 ...

随机推荐

  1. ruby安装及升级

    在centos6.x下执行上面的"gem install redis"操作可能会报错,坑很多!默认yum安装的ruby版本是1.8.7,版本太低,需要升级到ruby2.2以上,否则 ...

  2. Python_复习_习题_29

    # 之前做得的题 以后再遇到能保证会# 下周二考 :所有的知识# 面试题:认真对待## 三元运算符# 接收结果的变量 = 条件为真的结果 if 条件 else 条件为假的结果# 接收结果的变量 = “ ...

  3. Python_每日习题_0001_数字组合

    # Topic: There are four digits: 1, 2, 3 and 4. # How many different three digits can be formed witho ...

  4. rabbitMq与spring boot搭配实现监听

    在我前面有一篇博客说到了rabbitMq实现与zk类似的watch功能,但是那一篇博客没有代码实例,后面自己补了一个demo,便于理解.demo中主要利用spring boot的配置方式, 一.消费者 ...

  5. M2事后会议报告

    设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? Beta阶段的爬虫需要更稳定.更高效.操作更便捷.在定义中爬取对性能和功能的要求高,典型用户和场景 ...

  6. python 中一些常用的内置函数

    一.常用内置函数 abs(x) 返回绝对值,参数为int float,非字符只能num all(iterable) 如果迭代对象里面的所有值都为真就返回True.all([1, 2, -7]) --- ...

  7. CI框架在辅助函数中使用配置文件中的变量

    问题: 现有一个自定义的辅助函数,想要获取配置文件中的配置项(配置文件路径为application/config/config.php) 分析: 辅助函数并不是定义在一个class中,而是很多个可供外 ...

  8. Java基础实践一:for关键字的实现原理

    Java源码: /** * Demo.java * com.yuanchuangyun.libra.web * * * ver date author * ────────────────────── ...

  9. schema举例二

    schema举例二: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs=& ...

  10. string.PadLeft & string.PadRight

    比如我想让他的长度是20个字符有很多字符串如string a = "123",只有3个字符怎么让他们在打印或显示在textBox上的时候不够的长度用空格补齐呢? string.Pa ...