前向星及spfa大法
一、前向星
一种数据结构,以储存边的方式来存储图。构造方法如下:读入每条边的信息,将边存放在数组中,把数组中的边按照起点顺序排序(可以使用基数排序),前向星就构造完了。前向星通常用在点的数目太多,或点之间边数太多,一般在别的数据结构不能使用的时候。除了不能直接用起点终点定位以外,前向星几乎是完美的。
第一个任务
用前向星存储图并按其规则输出每一条边
n为图的顶点数,m为该图有多少条边
接下来m行为每条边的起始点
样例输入:
5 7
1 2
2 3
3 4
1 3
4 1
1 5
4 5
样例输出:
1 5
1 3
1 2
2 3
3 4
4 5
4 1
#define N 500005
struct Edge{//用Edge类型来存储图的每一条边int to,next,w;
}edge[N];
int cnt,head[N];//cnt用于记录每一条边的编号
void Add_edge(int u,int v,int w){edge[++cnt].to=v;edge[cnt].w=w;edge[cnt].next=head[u];head[u]=cnt;
}
int main(){int i,m,u,v,w;cin>>n>>m;for(i=0;i<m;i++){cin>>u>>v>>w;Add_edge(u,v,w);}for(u=1;u<=n;u++) for(i=head[u];i;i=edge[i].next){v=edge[i].to;cout<<u<<' '<<v<<endl;}return 0;
}
u | v |
10 | 4 |
23 | 54 |
#include<queue>
#define N 500005
using namespace std;
int d[N],vis[N],flag[N],head[N],n,m,cnt;
const int inf=0x3fffffff;
struct Edge{
int to,next,w;
}edge[N];
queue <int> q;
void add_edge(int u,int v,int w){
edge[++cnt].to=v;
edge[cnt].w=w;
edge[cnt].next=head[u];
head[u]=cnt;
}
void spfa(){
int i,w,u,v;
for(i=1;i<=m;i++)
d[i]=-inf;
q.push(1);
vis[1]++;
d[1]=100;
while(!q.empty()){
u=q.front();
flag[u]=0;
q.pop();
for(i=head[u];i;i=edge[i].next){
v=edge[i].to;
w=edge[i].w;
//cout<<u<<' '<<v<<' '<<d[u]<<' '<<d[v]<<' ';
if(d[u]+w>0&&d[u]+w>d[v]){
d[v]=d[u]+w;
if(!flag[v]){
if(vis[v]>n){
edge[i].w=-inf;
}
else{
vis[v]++;
q.push(v);
flag[v]=1;
}
}
}
cout<<d[v]<<endl;
}
}
}
int main(){
ios::sync_with_stdio(false);
//freopen("spfa1.in","r",stdin);
int j,u,w,v,hn;
cin>>n;
for(u=1;u<=n;u++){
cin>>w>>hn;
m+=hn;
for(j=0;j<hn;j++){
cin>>v;
add_edge(u,v,w);
}
}
spfa();
if(d[n]>0)cout<<"Yes";
else cout<<"No";
return 0;
}
前向星及spfa大法相关推荐
- 图论:SPFA 算法详解( 算法竞赛入门到进阶) HDU 2544 链式前向星 【提供ACM模板+图解,不会都难!】
文章目录 SPFA简介 链式前向星介绍 SPFA算法思路详细 模板-链式前向星 参考书籍:算法竞赛入门到进阶 罗勇军 SPFA简介 用队列处理Bellman-Ford算法可以很好地优化,这种方法叫做S ...
- 【模板】链式前向星+spfa
洛谷传送门--分糖果 博客--链式前向星 团队中一道题,数据很大,只能用链式前向星存储,spfa求单源最短路. 可做模板. #include <cstdio> #include <q ...
- %大赛D--链式前向星+SPFA(BFS)+各种数据类型+各种最短路复习
单源最短路模板题,这里尝试用SPFA,但有几点细节: ①不能用邻接矩阵,开不下1e5*1e5的二维数组:邻接表vector<p>G[maxn]或链式前向星 ②注意用longlong,而且I ...
- Day 7 A - Age of Moyu HDU 6386 | 最短路 | SPFA | 链式前向星
松弛:原来用一根橡皮筋连接p和w两点,现在有一点v到w的路径更短,现在把橡皮筋w点的另一端p换成v点,这样缓解橡皮筋紧绷的压力,让其变得松弛. 来自:原博 关于SPFA算法 来自:原博 链式前向星 # ...
- spfa(链式前向星)+dijkstra(链式前向星)
链式前向星 链式前向星可以存图, 它存图的方式是: 将任意一个节点的所有临边按输入顺序依次连接起来将任意一个节点的所有临边按输入顺序依次连接起来将任意一个节点的所有临边按输入顺序依次连接起来 然后头节 ...
- P3366 【模板】最小生成树(链式前向星,prim,有坑)难度⭐⭐
题目链接 输入: 4 5 1 2 2 1 3 2 1 4 3 2 3 4 3 4 3 输出: 7 链式前向星相比于矩阵,遍历的代码更加复杂一点,但是省空间,这道题用矩阵存就MLE,只能用链式前向星存. ...
- 蓝桥集训之BFS、DFS和链式前向星
配套视频 https://www.bilibili.com/video/BV1RD4y1F7Fq 一.建图基础 前言 图一般定义为二元集: 由顶点集与边集构成. 或者更抽象的说,由一个集合(顶点),和 ...
- 图论部分模板(基于链式前向星的存储方式)
图论篇部分模板(基于链式前向星的存储方式) 你还在为暴力枚举复杂度太高而苦恼吗?你还在为DP而痛苦吗?你还在为搜索剪枝而绞尽脑汁吗?选择链式前向星吧,链式前向星--专注存图20年 . 1. 链式前向星 ...
- 迪杰斯特拉最全详解(朴素版,堆优化+邻接表存图/链式前向星存图)
迪杰斯特拉 迪杰斯特拉算法分析 迪杰斯特拉(朴素版) 迪杰斯特拉堆优化(邻接表存图) 迪杰斯特拉堆优化(链式前向星存图) 最短路--spfa(链式前向星存图) 迪杰斯特拉算法分析 一般用三种数据结构存 ...
最新文章
- 记录Linux下的钓鱼提权思路
- Windows核心编程 第九章 线程与内核对象的同步(上)
- codeblock 显示 no such file(头文件)
- 科大星云诗社动态20210829
- tmux命令启动MySQL_tmux启动脚本
- 开源软件加密授权方案_身份验证和授权作为开源解决方案服务
- java整体打印二叉树
- 制作自己的特色PE----Mr.Zhang
- 《那些年啊,那些事——一个程序员的奋斗史》——54
- 机器学习课程笔记【十】- 混合高斯与期望最大化算法
- R | package基础 | Rstudio + devtools 创建/开发R包(初学者 指南| 简明详细流程)
- html5 游戏 性能测试工具,没事跑个分!几款Chrome内核浏览器性能测试
- matlab可以算二重积分么,matlab 二重积分函数
- php 忽略 deprecated,php Deprecated 解决办法
- java计算机毕业设计html5健身房信息管理系统MyBatis+系统+LW文档+源码+调试部署
- docker-compose启动hyperf项目
- 计算机主机拆装ppt模板,计算机拆装步骤222.ppt
- Expert 诊断优化系列------------------内存不够用么?
- 传奇服务器npc位置文件,传奇GEE引擎服务端自定义NPC示列工具
- Python 实现 黑客帝国中的字符雨