首页 > 其他分享 >floyd 详解

floyd 详解

时间:2024-01-27 09:00:59浏览次数:37  
标签:输出 加工 int bi ai floyd 详解 dis

解析


 

 

模板


 

 


第1题     floyd练习 查看测评数据信息

给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,边权可能为负数。再给定 k 个询问,每个询问包含两个整数 x 和 y,表示查询从点 x 到点 y 的最短距离,如果路径不存在,则输出 impossible。数据保证图中不存在负权回路。1≤n≤200 ,1≤k≤n,1≤m≤20000。图中涉及边长绝对值均不超过 10000。


输入格式

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

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

输出格式

共 k 行,每行输出一个整数,表示询问的结果,若询问两点间不存在路径,则输出 impossible。

输入/输出例子1

输入:

3 3 2

1 2 1

2 3 2

1 3 1

2 1

1 3

输出:

impossible

1

样例解释

#include <bits/stdc++.h>
using namespace std;
 
const int N=205;
int n, m, k, u1, v1, w1, dis[N][N];
void flo()
{
	for (int k=1; k<=n; k++)
		for (int i=1; i<=n; i++)
			for (int j=1; j<=n; j++)
                dis[i][j]=min(dis[i][j], dis[i][k]+dis[k][j]);
}
int main()
{
	memset(dis, 63, sizeof dis);
	scanf("%d%d%d", &n, &m, &k);
	for (int i=1; i<=m; i++)
	{
		scanf("%d%d%d", &u1, &v1, &w1);
		dis[u1][v1]=min(dis[u1][v1], w1); //防止重边
		dis[u1][u1]=0, dis[v1][v1]=0;
	}
	flo();
	/*for (int i=1; i<=n; i++)
	
		for (int j=1; j<=n; j++)
			cout<<dis[i][j]<<" ";
		cout<<endl;
	}*/
	while (k--)
	{
		scanf("%d%d", &u1, &v1);
		if (dis[u1][v1]>dis[0][0]/2) printf("impossible\n"); //有负权边,但是怎么样多少负数相加也不可能超过初值的一半,详解看下面
		else printf("%d\n", dis[u1][v1]);
	} 
    return 0;
}

 为什么是“dis[u1][v1]>dis[0][0]/2”

 

 


第2题     牛奶加工站 查看测评数据信息

牛奶生意正红红火火!农夫约翰的牛奶加工厂内有 N 个加工站,编号为 1…N,以及 N−1 条通道,每条连接某两个加工站。(通道建设很昂贵,所以约翰选择使用了最小数量的通道,使得从每个加工站出发都可以到达所有其他加工站)。为了创新和提升效率,约翰在每条通道上安装了传送带。不幸的是,当他意识到传送带是单向的已经太晚了,现在每条通道只能沿着一个方向通行了!所以现在的情况不再是从每个加工站出发都能够到达其他加工站了。然而,约翰认为事情可能还不算完全失败,只要至少还存在一个加工站 i 满足从其他每个加工站出发都可以到达加工站 i。注意从其他任意一个加工站 j 前往加工站 i 可能会经过 i 和 j 之间的一些中间站点。请帮助约翰求出是否存在这样的加工站 i。

1<=N<=100


输入格式

输入的第一行包含一个整数 N,为加工站的数量。以下 N−1行每行包含两个空格分隔的整数 ai 和 bi,满足 1≤ai,bi≤N 以及 ai≠bi。这表示有一条从加工站 ai 向加工站 bi 移动的传送带,仅允许沿从 ai 到 bi 的方向移动。

输出格式

如果存在加工站 i 满足可以从任意其他加工站出发都可以到达加工站 i,输出最小的满足条件的 i。否则,输出 −1。

输入/输出例子1

输入:

3

1 2

3 2

输出:

2

大样例压缩包

点击下载
样例解释

#include <bits/stdc++.h>
using namespace std;
 
const int N=205;
int n, u1, v1, w1, dis[N][N];
void flo()
{
	for (int k=1; k<=n; k++)
		for (int i=1; i<=n; i++)
			for (int j=1; j<=n; j++)
				dis[i][j]=min(dis[i][j], dis[i][k]+dis[k][j]);
}
int main()
{
	memset(dis, 63, sizeof dis);
	scanf("%d", &n);
	for (int i=1; i<n; i++)
	{
		scanf("%d%d", &u1, &v1);
		w1=1;
		dis[u1][v1]=min(dis[u1][v1], w1);
		dis[u1][u1]=0, dis[v1][v1]=0;
	}
	flo();
	
	for (int i=1; i<=n; i++)
	{
		int flag=0;
		for (int j=1; j<=n; j++)
			if (dis[j][i]==dis[0][0]) 
			{
				flag=1;
				break;
			}
		if (!flag)
		{
			printf("%d", i);
			return 0;
		}
	}
	printf("-1");
    return 0;
}

 

思考题


 

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

标签:输出,加工,int,bi,ai,floyd,详解,dis
From: https://www.cnblogs.com/didiao233/p/17991071

相关文章

  • 详解SpringCloud之远程方法调用神器Fegin
    第1章:引言咱们作为Java程序员,在微服务领域里,SpringCloud可谓是个耳熟能详的大名。它提供了一套完整的微服务解决方案,其中就包括了服务间的通信。在这个微服务中,有一个成员特别引人注意,它就是Feign。那Feign到底是什么呢?简单来说,Feign是一个声明式的Web服务客户端,它让编写Web服......
  • 详解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......
  • Activiti七大接口,28张表详解
    Activiti七大接口,28张表详解7大接口RepositoryService:提供管理流程部署和流程定义API。RuntimeService:提供运行时流程实例进行管理与控制API。TaskService:提供流程任务管理API。IdentityService:提供对流程用户数据进行管理的API,包括用户组、用户及用户–组关系。ManagementServ......
  • 如何获取微信的版本号详解【附完整源码】
    前两天群里有人问到这个问题,我想着在网上找个教程发给他,没想到这玩意还挺新鲜?网上基本上找不到实质性的回答...关于这个问题,其实挺简单的,微信的版本号其实就写在注册表中,读取它就完事了~打开注册列表找到【计算机\HKEY_CURRENT_USER\Software\Tencent\WeChat】,就看的到版本号......
  • Arch(Manjaro) Linux Pacman 命令详解
    参考Wiki:https://wiki.archlinuxcn.org/zh-hans/Pacmanyay命令参考:HerePacman是一个软件包管理器,作为ArchLinux发行版的一部分。简单来说,就是和apt-get之于Ubuntu一样,pacman就是Arch的apt-get。要想轻松玩转Arch,学会pacman是必需的。Pacman包管理器是ArchLinux的一大亮点。......