[最短路SPFA]--启动!!!!!
基础模板
#include<bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define PII pair<int,int >
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
const int N = 1e6+10;
int n,m,s;
//int cnt[N];
bool vis[N];
int dis[N];
vector<PII> v[N];
//bool suc = 0;
void spfa(int s)
{queue<int> q;for(int i=1;i<=n;i++){//v[i].clear();//1.测试多组数据,并且每组数据重新建边时加上dis[i] = 1e9;//vis[i] = 0;//cnt[i] = 0;//在1.的情况下,还要查询负环时加上}vis[s] = 1;dis[s] = 0;q.push(s);while(q.size()){int now = q.front();q.pop();vis[now] = 0;for(auto t:v[now]){int spot = t.fi,w = t.se;if(dis[spot]>dis[now]+w){//cnt[spot] = cnt[now]+1;//查询负环时加上//if(cnt[spot]>=n)//{// suc= 1;// return;//}dis[spot] = dis[now]+w;if(vis[spot]==0){vis[spot]=1;q.push(spot);}} }}
}
int main()
{IOS;cin>>n>>m;while(m--){int a,b,w;cin>>a>>b>>w;v[a].pb({b,w});//v[b].pb({a,w});//双向边时候加上}cin>>s;//s为初始起点spfa(s);
}
P3371 【模板】单源最短路径(弱化版)
#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define PII pair<int,int >
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
const int N = 1e6+10;
int n,m,s;
vector< pair<int,int> > v[N];//v[s][i].fi是初始点s能走到的第i个的点,v[s][i].se初始点s能走到
int dis[N];//是从初始点s到第i个点的最短路程
bool vis[N];//标记该点是否被走过了
void spfa()
{for(int i=1;i<=n;i++){dis[i] = 1e9;vis[i] = 0; }queue<int> q;q.push(s);dis[s] = 0;vis[s] = 1;while(q.size()){int now = q.front();q.pop();vis[now] = 0;for(auto t:v[now]){int spot = t.fi,w =t.se;if(dis[spot]>dis[now]+w){dis[spot] = dis[now]+w; if(vis[spot]==0){vis[spot] = 1;q.push(spot);} }}}
}
int main()
{IOS;cin>>n>>m>>s;while(m--){int a,b,c;cin>>a>>b>>c;v[a].pb({b,c});//v[b].pb({a,c});加上为无向边,不加为单向边 }spfa();for(int i=1;i<=n;i++){if(dis[i]==1e9) cout<<(1ll<<31)-1<<' ';else cout<<dis[i]<<" ";}}
P3385 【模板】负环
#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define PII pair<int,int >
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
const int N = 1e6+10;
int n,m;
bool vis[N];
int dis[N];
int cnt[N];//1.加个数组
vector<PII> v[N];
//2.cnt[i]表示走到第i个点时用了几条边,一般最大为n-1条,如果存在负环, 则会>=n
bool spfa()//3.改为bool
{queue<int> q;for(int i=1;i<=n;i++){dis[i] = 1e9;vis[i] = 0;cnt[i] = 0;//查负环时加上}//初始化vis[1] = 1;dis[1] = 0; q.push(1);while(q.size()){int now = q.front();q.pop();vis[now] = 0;for(auto t:v[now]){int spot = t.fi,w = t.se;if(dis[spot]>dis[now]+w){cnt[spot] = cnt[now]+1;//4.记录已用环数 if(cnt[spot]>=n) return true; //5.一定要返回,不然会一直重复去加负权 //如 5 -> 6边权为2, 6 -> 5边权为-3,便会一直+2-3下去,越加越爽,爽到负无穷 dis[spot] = dis[now]+w;if(vis[spot]==0){q.push(spot);vis[spot]=1;}}}}return false;//6.没有负环
}
int main()
{IOS;int k;cin>>k;while(k--){cin>>n>>m;for(int i=1;i<=max(n,m);i++){v[i].clear();//多组数据时加上dis[i] = 1e9;vis[i] = 0;cnt[i] = 0;}while(m--){int a,b,c;cin>>a>>b>>c;if(c>=0) v[a].pb({b,c}),v[b].pb({a,c});else v[a].pb({b,c});}if(spfa()) cout<<"YES"<<"\n";else cout<<"NO"<<"\n";} }
那如果存在非连通的点呢?
//从原点n+1开始搜bool spfa()//3.改为bool
{queue<int> q;for(int i=1;i<=n;i++){dis[i] = 1e9;vis[i] = 0;cnt[i] = 0;//查负环时加上}//初始化vis[n+1] = 1;//从原点n+1开始搜,详情见7.--- dis[n+1] = 0; q.push(n+1);
}
int main()
{for(int i=1;i<=n;i++)//7.注意!!如果各点可能不是全部连通,如果从1开始会搜不到另一部分的负权{ //所以建立一个点把所有点连接起来,我们就设它为n+1v[n+1].pb({i,0});//从n+1开始到所有的点,边权为零不会影响结果 }
}
P3905 道路重建
#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define PII pair<int,int >
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
const int N = 1e6+10;
int n,m,d,A,B;
int dis[N];
bool vis[N];
vector<PII> v[N];
map<pair<int,int>,int> mp;
void spfa()
{for(int i=1;i<=n;i++){dis[i] = 1e9;vis[i] = 0;}//初始化queue<int> q;q.push(A);dis[A] = 0;vis[A] = 1;while(q.size()){int now = q.front();q.pop();vis[now] = 0;for(auto t:v[now]){int spot = t.fi,w = 0; if(mp[{now,spot}]==1) w = t.se;//这条路如果被炸过了,那么就把他的长度算上,去修它 if(dis[spot]>dis[now]+w){dis[spot] = dis[now]+w; if(vis[spot]==0){vis[spot] = 1;q.push(spot);} }}}
}
int main()
{IOS;cin>>n>>m;while(m--){int a,b,c;cin>>a>>b>>c;v[a].pb({b,c});v[b].pb({a,c});}cin>>d;while(d--){int a,b;cin>>a>>b;mp[{a,b}] = 1;//标记a -> bb不能走 mp[{b,a}] = 1;//b -> a不能走 }cin>>A>>B;spfa();cout<<dis[B];
}
P1629 邮递员送信
#include<bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define PII pair<int,int >
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
const int N = 1e6+10;
int n,m;
vector<PII> v1[N];
vector<PII> v2[N];
bool vis1[N];
int dis1[N];
bool vis2[N];
int dis2[N];
int sum=0;
void spfa1(int s)
{queue<int> q;vis1[s] = 1;for(int i=1;i<=n;i++){dis1[i] = 1e9;vis1[i] = 0;}//初始化dis1[s] = 0;q.push(s);while(q.size()){int now = q.front();q.pop();vis1[now] = 0;for(auto t:v1[now]){int spot = t.fi,w = t.se;if(dis1[spot]>dis1[now]+w){dis1[spot] = dis1[now]+w;if(vis1[spot]==0){vis1[spot] = 1;q.push(spot);}}}}
}
void spfa2(int s)
{queue<int> q;vis2[s] = 1;for(int i=1;i<=n;i++){dis2[i] = 1e9;vis2[i] = 0;}//初始化dis2[s] = 0;q.push(s);while(q.size()){int now = q.front();q.pop();vis2[now] = 0;for(auto t:v2[now]){int spot = t.fi,w = t.se;if(dis2[spot]>dis2[now]+w){dis2[spot] = dis2[now]+w;if(vis2[spot]==0){vis2[spot] = 1;q.push(spot);}}}}
}
int main()
{IOS;cin>>n>>m;while(m--){int a,b,l;cin>>a>>b>>l;v1[a].pb({b,l});v2[b].pb({a,l});//从所有的点走到1的路径,反向建边,让1替他们走一遍,避免了每个点都调用一次spfa导致超时} spfa1(1);spfa2(1);for(int i=1;i<=n;i++){sum+=dis1[i];sum+=dis2[i];}cout<<sum;
}
P2136 拉近距离
#include<bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define PII pair<int,int >
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
const int N = 1e6+10;
int n,m,T;
int cnt[N];
bool vis[N];
int dis[N];
vector<PII> v[N];
bool suc = 0;
void spfa(int s)
{queue<int> q;for(int i=1;i<=n;i++){dis[i] = 1e9;vis[i] = 0;cnt[i] = 0;}vis[s] = 1;dis[s] = 0;q.push(s);while(q.size()){int now = q.front();q.pop();vis[now] = 0;for(auto t:v[now]){int spot = t.fi,w = t.se;if(dis[spot]>dis[now]-w){cnt[spot] = cnt[now]+1;if(cnt[spot]>=n){suc= 1;return;}dis[spot] = dis[now]-w;if(vis[spot]==0){vis[spot]=1;q.push(spot);}}}}
}
int main()
{IOS;cin>>n>>m;while(m--){int a,b,w;cin>>a>>b>>w;v[a].pb({b,w});}int minn=1e9;spfa(1);minn = min(minn,dis[n]);spfa(n);//小红也会干事情来拉近距离 ,靠!!!! minn = min(minn,dis[1]);if(suc) cout<<"Forever love";else cout<<minn;
}
相关文章:
[最短路SPFA]--启动!!!!!
基础模板 #include<bits/stdc.h> #define ll long long #define fi first #define se second #define pb push_back #define PII pair<int,int > #define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0) using namespace std; const int N 1e610; int …...
大模型是否潜在地进行多跳推理?
人工智能咨询培训老师叶梓 转载标明出处 以往的研究表明,基于Transformer的LLMs能够在参数中存储和检索事实信息,以完成简单提示,例如“Stevie Wonder的母亲是谁”。此外,当必要信息明确给出时,LLMs表现出了显著的上下…...
人为什么不能长期待在家里?三个原因告诉你答案
在现代社会的快节奏生活中,人们时常渴望能够拥有一段长时间待在家里的闲暇时光,幻想这会是一段惬意、舒适且自由的经历。然而,实际情况往往并非如此。许多人在经历了数日甚至更长时间的居家生活后,会逐渐感受到诸多负面情绪和不良影响。以下将详细阐述人为什么不能长期待在…...
MATLAB画散点密度图(附代码和测试数据的压缩包)
1. 有关 Matlab 获取代码关注WZZHHH回复关键词,或者咸鱼关注:WZZHHH123 怀俄明探空站数据解算PWV和Tm:怀俄明探空站数据解算PWV和Tm 怀俄明多线程下载探空站数据(包括检查和下载遗漏数据的代码):怀俄明多线…...
SSH配置命令
前置环境:端口配置IP地址,client和server之间可ping通,此处省略 server端: 开启stelnet [Huawei]stelnet server enable Info: Succeeded in starting the Stelnet server. aaa模式相关配置 #进入aaa模式 [Huawei]aaa # 添加用户admin和…...
谷粒商城实战记录-虚拟机开启密码认证登录
文章目录 一,虚拟机无法用用户名密码登录二,解决方案1,修改配置2,重启sshd服务3,测试SSH登录注意事项结论 参考文献 一,虚拟机无法用用户名密码登录 当使用Vagrant创建和管理虚拟机时,通常会通…...
C语言程序设计-[1] 基础语法
1、字符集 字符集:是ASCII字符集的一个子集。 注:基本上就是电脑键盘可以输入的一些字符。 2、标识符 标识符:用来命名程序中的一些实体,如:变量、常量、函数、数组名、类型名、文件名等。由一个或多个字符组成。 —…...
JavaSE第11篇:设计模式
一、创建型模式 1、工厂方法模式 2、抽象工厂模式 3、单例模式singleton /*** 单例* 饿汉式(线程安全的):在加载类的时候就会创建类的单例,并保存在类中。* 1.定义类变量实例并直接实例化,在类加载的时候就完成了实例化并保存在类中;* 2.定义无参构造…...
【Unity Shader】切线空间下计算凹凸映射
// Upgrade NOTE: replaced mul(UNITY_MATRIX_MVP,*) with UnityObjectToClipPos(*)Shader "Unlit/NormalTangent" {Properties{_Color("Color Tint", Color) (1, 1, 1, 1)_MainTex("Main Tex", 2D) "While"{}//法线纹理_BumpMap(&q…...
解决Ubuntu/Kali手动创建的启动器在dock上没有图标,且不能“添加到dock中“的问题
文章目录 问题描述问题解决解决方案 1 | 添加StartupWMClass字段解决方案 2 | 重命名文件名 如何获取 WM 值?方式 1 | xprop 命令方式 2 | 直接查看 问题描述 这个启动器无论是在菜单还是桌面都是正常的,只有在dock中没有图标,且不像其他APP…...
【Android】数据持久化——数据存储
持久化技术简介 在你打开完成了一份PPT之后关闭程序,再次打开肯定是希望之前的内容还存在在电脑上,一打开PPT,之前的内容就自动出现了。数据持久化就是将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下…...
如何通过谷歌外链快速增加网站流量?
利用谷歌外链提升流量的方法非常直接,但实际上,外链影响的是关键词排名,关键词排名提升了,自然就会有流量,所以谷歌外链不是直接能提升网站流量,而是间接的,下面,我会详细介绍几种有…...
vLLMcuda安装笔记
1. 引言 最近在部署Qwen模型时,文档上有提到强烈建议用vLLM来部署模型,按照公开的性能测试数据,用vLLM部署Qwen模型的文本推理速度要比transformers部署快3~4倍。带着这个好奇就开始安装尝试,但试下来这个安装过程并没有那么顺利…...
C++入门基本语法(2)
一、引用 1、基本概念与定义 引用不是新定义一个变量,而是给已存在的变量起一个别名,编译器不会为引用变量开辟内存空间,它和它所引用的变量公用同一块内存空间; 引用的写法:变量类型& 引用别名 变量ÿ…...
Internet Download Manager(IDM)2024中文版本有哪些新功能?6.42版本功能介绍
1. Internet Download Manager(IDM)是一款功能强大的下载管理器,支持所有流行的浏览器,并可提升下载速度高达5倍。 2. IDM具有智能下载逻辑加速器,可以设置文件下载优先级、分块下载等,提高下载效率。 IDM…...
深入理解 C 语言中的联合体
目录 引言 一、 联合体的定义与基本用法 1.联合体的定义 2.基本用法 二、 联合体与结构体的区别 1.结构体 2.联合体 3.对比 三、联合体的优势 1. 节省内存 2. 提高效率 3. 代码简洁性 四、联合体的存储细节 1.内存对齐 2.大小计算 五、联合体的高级用法 1.匿…...
OpenCV||超详细的几何变换
2D图像几何变换的33矩阵: 图像常见的几何变换: 图像来源:《OpenCV 4.5计算机视觉开发实战:基于Python》作者:朱文伟 李建英; 1. 平移(Translation) 在OpenCV中,平移不是…...
网络程序设计基础概述
文章目录 前言一、网络程序设计基础二、网络协议 1.IP协议2.TCP与UDP协议三、端口与套接字总结 前言 网络程序设计编写的是与其他计算机进行通信的程序代码。Java将网络程序所需要的东西封装成了不同的类。开发者只需要创建这些类的对象,调用相应的方法,…...
MySQL:数据库用户
数据库用户 在关系型数据库管理系统中,数据库用户(USER)是指具有特定权限和访问权限的登录账户。每个用户都有自己的用户名和密码,以便系统可以通过认证来识别他们的身份。数据库用户可以登录数据库,在其中执行各种类…...
用TensorFlow训练自己的第一个模型
现在学AI的一个优势就是:前人栽树后人乘凉,很多资料都已完善,而且有很多很棒的开源作品可以学习,感谢大佬们 项目 项目源码地址 视频教程地址 我在大佬的基础上基于此模型还加上了根据特征值缓存进行快速识别的方法,…...
MySQL数据库入门基础知识 【1】推荐
数据库就是储存和管理数据的仓库,对数据进行增删改查操作,其本质是一个软件。 首先数据有两种,一种是关系型数据库,另一种是非关系型数据库。 关系型数据库是以表的形式来存储数据,表和表之间可以有很多复杂的关系&a…...
Anaconda下的 jupyter notebook安装及使用
安装 打开Anaconda Powershell Prompt或Anconda Prompt 输入命令conda install jupyter notebook进行安装 启动 切换到工作目录,输入命令jupyter notebook等待浏览器打开网页 命令行启动jupyter notebook的链接复制到浏览器同样可以打开jupyter notebook 在Ancon…...
C语言初阶(11)
1.结构体定义 结构体就是一群数据类型的集合体。这些数据类型被称为成员变量。结构的成员可以是标量、数组、指针,甚至是其他结构体。 2.结构体的声明和结构体变量命名与初始化 结构体声明由以下结构组成 struct stu {char name[12];int age; }; 结构体命名有两…...
Unity获取Animator动画播放完成事件
整理了一些在日常经验中处理动画播放完成事件的方法 方法: 1.Dotween配合异步实现 2.状态机计时方法实现 3.原生动画行为方法实现 方法一:Dotween异步方法 using UnityEngine; using System.Threading.Tasks; using DG.Tweening;public class PlayerAnimAsync : M…...
git submodule 使用
在Git中,子模块(submodule)是一种将一个Git仓库作为另一个Git仓库的子目录嵌入的方式。这使得主仓库能够跟踪和管理对外部依赖的更改。 添加子模块 初始化父仓库:如果你还没有创建父仓库,先创建它。 添加子模块&…...
【Jenkins未授权访问漏洞 】
默认情况下 Jenkins面板中用户可以选择执行脚本界面来操作一些系统层命令,攻击者可通过未授权访问漏洞或者暴力破解用户密码等进入后台管理服务,通过脚本执行界面从而获取服务器权限。 第一步:使用fofa语句搜索 搜索语句: port&…...
前端处理 Excel 文件
引入XLSX XLSX 是一个流行的 JavaScript 库,用于处理 Excel 文件(包括 .xls 和 .xlsx 格式)。它可以在 Node.js 环境和浏览器中运行,提供了丰富的 API 来读取、写入、修改 Excel 文件。当你使用 import * as XLSX from xlsx; 这行…...
(vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
(vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束 需求:按勾选的顺序给后端传值 难点:在 Element UI 的 el-cascader 组件中,默认的行为是根据数据的层级结构来显示选项,用户的选择也会基于这种层级结构,el-…...
Redis进阶(四):哨兵
为了解决主节点故障,需要人工操作切换主从的情况;因此需要一种方法可以自动化的切换:哨兵的引入大大改变这种情况。 哨兵的基本概念 自动切换主从节点 哨兵架构 1、当一个哨兵节点发现主节点挂了的时候,还需要其他节点也去检测一…...
蓝屏事件:网络安全的启示
“微软蓝屏”事件暴露了网络安全哪些问题? 近日,一次由微软视窗系统软件更新引发的全球性“微软蓝屏”事件,不仅成为科技领域的热点新闻,更是一次对全球IT基础设施韧性与安全性的深刻检验。这次事件,源于美国电脑安全技…...
可以做旅行计划的网站/网络宣传
当我们平时清理电脑文件时误删了文件,而想要恢复误删文件就不知道怎么处理了。下面与大家分享用diskgenius分区工具来恢复删除文件,一起来看看如何 恢复文件 吧。1、首先,我们提前制作好u启动u盘启动盘。接着将该u盘启动盘插入电脑usb接口&am…...
哪些网站做推广性价比高/核心关键词
注释:锚的这两种类型都使用同样的标签;也许这就是它们拥有同样的名称的原因。但是我们发现,如果将它们区分开,把提供热点和超链接地址的锚看作“链接”,而用于标记文档的目标部分的锚称为“锚”,那么您将更…...
阜宁做网站的公司/小红书怎么做关键词排名优化
当你打开任何一个朋友的微信朋友圈,首先映入眼帘的是什么呢?你可能会说是他的头像,但其实最吸睛的除了头像之外还有朋友圈的背景图。这块地方比头像的位置更为宽大,我们在这里可以充分发挥自己的想象力设计出适合自己的非常具有吸引力的朋友…...
扁平化配色方案网站/在线域名查询网站
给定一个字符串s,将s分割成一些子串,使每个子串都是回文串。 返回s所有可能的回文串分割方案。 样例 给出 s "aab",返回 [ [“aa”, “b”], [“a”, “a”, “b”] ] 分析:采用深度优先搜索即可,这种回文串…...
网站兼容性测试怎么做/网络推广是啥
在Python中迭代序列(或者其他可迭代对象)时,有一些函数非常好用。有些函数位于itertools模块中,还有一些Python的内建函数也十分方便。 1. 并行迭代 程序可以同时迭代两个序列。比如有下面两个列表: names [anne, bet…...
如何破解wordpress主题/搜索引擎营销
1. Intent component : activity,service,broadcast receiver以及content provider component 与操作系统 通信的一种媒介工具 是intent。 intent是一种多用途通信工具。 Intent类的构造方法 //Class类型参数告诉ActivityManager应该启动哪个activi…...