首页 > 其他分享 >Bellman-ford 详解

Bellman-ford 详解

时间:2024-01-27 09:04:06浏览次数:30  
标签:输出 10000 int Bellman ford 详解 输入 号点 dis

讲解


 

 模板


 

第1题     bellman-ford练习 查看测评数据信息

给定一个 n 个点 m 条边的有向图,图中可能存在重边但不存在自环, 边权可能为负数。请你求出从 1 号点到 n 号点最短距离,如果无法从 1 号点走到 n 号点,输出 impossible。1≤n≤500 ,1≤m≤10000,任意边长的绝对值不超过 10000。
输入格式

 

第一行包含三个整数 n,m。

接下来 m 行,每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。

 
输出格式

 

输出一个整数,表示从 1 号点到 n 号点最短距离。如果不存在满足条件的路径,则输出 impossible。

 
输入/输出例子1

输入:

2 1

1 2 1

 

输出:

1

 
样例解释

#include <bits/stdc++.h>
using namespace std;

const int N=1e4+5;
struct edge
{
	int u, v, w; //存边
}a[N];
int n, m, x, y, z;
int e=0, dis[N];
void bel(int s)
{
	memset(dis, 63, sizeof dis);
	dis[s]=0;
	for (int i=1; i<n; i++) //顶多n-1轮
	{
		for (int j=1; j<=e; j++) //遍历边
		{
			int u=a[j].u, v=a[j].v, w=a[j].w;
			if (dis[v]>dis[u]+w) //松弛
				dis[v]=dis[u]+w;
		}	
	}
}
int main()
{
    scanf("%d%d", &n, &m);
    for (int i=1; i<=m; i++)
    {
    	scanf("%d%d%d", &x, &y, &z);
    	a[++e]={x, y, z}; //存边
	}
	bel(1);
	
	if (dis[n]==dis[0]) printf("impossible");
	else printf("%d", dis[n]);
    return 0;
}

 

 第2题     判断负环 查看测评数据信息

给定一个 n 个点 m 条边的有向图,边权可能为负数。请判断该图是否存在负环,如果存在输出“Yes”,否则输出“No”。1≤n≤500 ,1≤m≤10000,任意边长的绝对值不超过 10000。
输入格式

 

第一行包含三个整数 n,m。

接下来 m 行,每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。

 
输出格式

 

存在负环输出“Yes”,否则输出“No”。

 
输入/输出例子1

输入:

2 1

1 2 1

 

输出:

No

 
样例解释

#include <bits/stdc++.h>
using namespace std;

const int N=1e4+5;
struct edge
{
	int u, v, w;
}a[N];
int n, m, x, y, z;
int e=0, dis[N];
bool bel(int s)
{
	int flag=0;
	memset(dis, 63, sizeof dis);
	dis[s]=0;
	for (int i=1; i<=n; i++)
	{
		flag=0;
		for (int j=1; j<=e; j++)
		{
			int u=a[j].u, v=a[j].v, w=a[j].w;
			if (dis[v]>dis[u]+w)
				dis[v]=dis[u]+w, flag=1;
		}
		if (!flag) return false;
	}
	return true;
}
int main()
{
    scanf("%d%d", &n, &m);
    for (int i=1; i<=m; i++)
    {
    	scanf("%d%d%d", &x, &y, &z);
    	a[++e]={x, y, z};
	}
	
	if (bel(1)) printf("Yes");
	else printf("No");
    return 0;
}

 


 

思考题


 

https://www.cnblogs.com/didiao233/p/17991058

 

标签:输出,10000,int,Bellman,ford,详解,输入,号点,dis
From: https://www.cnblogs.com/didiao233/p/17991059

相关文章

  • spfa 详解
    算法基础 模板题 第1题    spfa最短路练习查看测评数据信息给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible。数据保证不存在负权回路。1≤n,m≤100000......
  • floyd 详解
    解析  模板  第1题    floyd练习查看测评数据信息给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。再给定k个询问,每个询问包含两个整数x和y,表示查询从点x到点y的最短距离,如果路径不存在,则输出impossible。数据保证图中不存在......
  • 详解SpringCloud之远程方法调用神器Fegin
    第1章:引言咱们作为Java程序员,在微服务领域里,SpringCloud可谓是个耳熟能详的大名。它提供了一套完整的微服务解决方案,其中就包括了服务间的通信。在这个微服务中,有一个成员特别引人注意,它就是Feign。那Feign到底是什么呢?简单来说,Feign是一个声明式的Web服务客户端,它让编写Web服......
  • Bellman-Ford
    \(Bellman-Ford\)求单源最短路,可以判断有无负权回路(若有,则不存在最短路),时效性较好,时间复杂度\(O(VE)\)。\(Bellman-Ford\)算法是求解单源最短路径问题的一种算法。单源点的最短路径问题是指:给定一个加权有向图\(G\)和源点\(s\),对于图\(G\)中的任意一点\(t\),求从\(s\)到\(t\)......
  • 详解pip install国内镜像
    下面是“pipinstall使用国内镜像的方法示例”的完整攻略。1.为什么需要使用国内镜像pip是Python的一个包管理工具,可以方便地安装、升级和删除Python包。但是pip默认从pypi.org下载包,这个网站的服务器位于海外,经常因网络和权限问题出现下载失败的情况,给开发带来不便。同时,由于......
  • @PostConstruct用法详解介绍
    1.@PostConstruct介绍定义:在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法。说明:被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。被@PostConstruct修饰的方法......
  • ARM指针寄存器——堆栈指针寄存器SP、程序计数器PC、连接寄存器LR详解
    堆栈的实现方法        在随机存储器区划出一块区域作为堆栈区,数据可以一个个顺序地存入(压入)到这个区域之中,这个过程称为‘压栈’(push)。通常用一个指针(堆栈指针SP—StackPointer)实现做一次调整,SP总指向最后一个压入堆栈的数据所在的数据单元(栈顶)。从堆......
  • STA(静态时序分析) 详解:如何计算最大时钟频率,以及判断电路是否出现时钟违例(timing viola
    1.什么是STA?     STA(静态时序分析)是时序验证的一种方法,用于计算和分析电路是否满足时序约束的要求。 2.为什么需要STA?    电路能否正常工作,其本质上是受最长逻辑通路(即关键路径)的限制,以及受芯片中存储器件的物理约束或工作环境的影响。    为了保......
  • 搜索推荐DeepFM算法详解:算法原理、代码实现、比赛实战
    搜索推荐DeepFM算法详解:算法原理、代码实现、比赛实战可以说,DeepFM是目前最受欢迎的CTR预估模型之一,不仅是在交流群中被大家提及最多的,同时也是在面试中最多被提及的:1、Deepfm的原理,DeepFM是一个模型还是代表了一类模型,DeepFM对FM做了什么样的改进,FM的公式如何化简并求......
  • 单点登录(SSO)实现详解!!!
    单点登录是什么?你是怎么理解的?单点登录是如何实现的普通登录提到单点登录,首先可以想到传统登录,通过登录页面根据用户名查询用户信息,判断密码是否正确,正确则将用户信息写到session,访问的时候通过从session中获取用户信息,判断是否已登录,登录则允许访问。普通登录的缺点由于sessi......