【HDU No. 2874】 城市之间的联系 Connections between cities

news2025/7/17 11:08:14

【HDU No. 2874】 城市之间的联系 Connections between cities

杭电OJ 题目地址

在这里插入图片描述

【题意】

由于大部分道路在战争期间已被完全摧毁,所以两个城市之间可能没有路径,也没有环。

已知道路状况,想知道任意两个城市之间是否存在路径。若答案是肯定的,则输出它们之间的最短距离。

【输入输出】

输入:

输入包含多个测试用例。每个用例的第1行都包含3个整数n、m、c (2≤n ≤10000,0≤m <10000,1≤c ≤1000000)。n 表示城市数,编号为1~n 。接下来的m 行,每行都包含3个整数i、j 和k,表示城市i 和城市j 之间的道路,长度为k 。

最后c 行,每行都包含i、j 两个整数,表示查询城市i 和城市j 之间的最短距离。

输出:

对每个查询,若两个城市之间没有路径,则输出“Not connected”,否则输出它们之间的最短距离。

【样例】

在这里插入图片描述

【思路分析】

这道题的两点之间无环,且有可能不连通,有可能不是一棵树,而是由多棵树组成的森林。

因此需要判断是否在同一棵树中,若不在同一棵树中,则输出“Not connected”,否则可以使用求解最近公共祖先的Tarjan算法求解。

【算法设计】

① 根据输入的数据,采用链式前向星存储图。

② 采用Tarjan算法离线处理所有查询。因为本题的操作对象可能有多棵树,因此需要注意两个问题:

  • [1] 修改Tarjan算法,引入一个root参数,用来判断待查询的两个节点是否在同一棵树中;
  • [2] 对未访问过的节点再次执行Tarjan算法。

③ 将每个查询中两个节点之间的距离都存储在答案数组中。

【算法实现】

#include<cstdio>
#include<cstring>

using namespace std;

const int maxn=1e4+10;
const int maxq=1e6+10;

struct Node{//边结构体 
	int to;//邻接点 
	int w;//边权 
	int next;//下一条边的下标 
}e[maxn<<1];

int ehead[maxn],dis[maxn],fa[maxn],ecnt,vis[maxn];

struct Query{//边结构体 
	int to;
	int id;//查询的编号 
	int next;
}qe[maxq<<1];

int qhead[maxn],ans[maxq],qcnt;
int n,m,c;
 
void init(){
	ecnt=qcnt=0;
	memset(ehead,-1,sizeof(ehead));
	memset(qhead,-1,sizeof(qhead));
	memset(vis,-1,sizeof(vis));
}
 
void add1(int u,int v,int w){
	e[ecnt].to=v;
	e[ecnt].w=w;
	e[ecnt].next=ehead[u];
	ehead[u]=ecnt++;
}
 
void add2(int u,int v,int id){
	qe[qcnt].id=id;
	qe[qcnt].to=v;
	qe[qcnt].next=qhead[u];
	qhead[u]=qcnt++;
}
 
int Find(int x){
	if(x!=fa[x])
		fa[x]=Find(fa[x]);
	return fa[x];
}
 
void LCA(int u,int deep,int root){
	fa[u]=u;
	dis[u]=deep;
	vis[u]=root;
	for(int i=ehead[u];~i;i=e[i].next){
		int v=e[i].to;
		if(vis[v]==-1){
			LCA(v,deep+e[i].w,root);
			fa[v]=u;
		}
	}
	for(int i=qhead[u];~i;i=qe[i].next){
		int v=qe[i].to;
		if(vis[v]==root)
			ans[qe[i].id]=dis[v]+dis[u]-2*dis[Find(v)];
	}
}
 
 
int main(){
	
	while(~scanf("%d%d%d",&n,&m,&c)){
		int u,v,w;
		init();
		while(m--){
			scanf("%d%d%d",&u,&v,&w);
			add1(u,v,w);
			add1(v,u,w);	
		}
		for(int i=0;i<c;i++){
			scanf("%d%d",&u,&v);
			ans[i]=-1;
			add2(u,v,i);
			add2(v,u,i);
		}
		for(int i=1;i<=n;i++){
			if(vis[i]==-1)
				LCA(i,0,i);
		}
		for(int i=0;i<c;i++){
			if(ans[i]==-1) printf("Not connected\n");
			else printf("%d\n",ans[i]);
		}
	}
	
	return 0;
} 

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/36904.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

11.一键分析你的上网行为(web页面可视化)

## 一键分析你的上网行为, 看看你平时上网都在干嘛? ## Chrome浏览器历史记录文件可视化### 简介**想看看你最近一年都在干嘛&#xff1f;看看你平时上网是在摸鱼还是认真工作&#xff1f;想写年度汇报总结&#xff0c;但是苦于没有数据&#xff1f;现在&#xff0c;它来了。*…

国外顶尖程序员手写,402页汉译版微服务与事件驱动架构开发手册

为什么用事件驱动型微服务&#xff1f; Marshall McLuhan认为&#xff0c;影响人类并给社会带来根本性变革的不是媒介的内容&#xff0c;而是与媒介的互动过程。在我们的集体参与下&#xff0c;报纸、广播、电视、互联网、即时通信和社交媒体改变了人类的互动方式以及社会结构…

JDK17新特性

一.JEP 409: Sealed Classes 1.1简介 官网链接sealed class 从如下官网的简介与描述可以看出&#xff0c;这个新特性的目的是为了限制类与接口的 被继承与实现&#xff0c;比如说我有个 A类&#xff0c;那么我现在限定只有 B&#xff0c;C&#xff0c;D三个类可以继承 那么就需…

DRM架构介绍(一)

1、 DRM简介&#xff08;Direct Rendering Manager&#xff09;传统linux显示设备驱动开发时&#xff0c;通常使用FB驱动架构&#xff0c;随着显卡性能升级&#xff1a;显示覆盖&#xff08;菜单层级&#xff09;、GPU加速、硬件光标&#xff0c;传统FB架构无法很好支持&#x…

activiti-bpmn-converter

activiti-bpmn-converter目录概述需求&#xff1a;设计思路实现思路分析1.BpmnXMLConstants2.BpmnXMLConverter3.StartEventXMLConverter4.EndEventXMLConverter参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full bu…

C++调用OpenCV实现图像平滑处理

1 前言 图像的平滑处理&#xff0c;也叫做模糊处理&#xff0c;是在尽量保留原始图像信息的情况下&#xff0c;抑制或去除图像内的噪声、降低细节层次信息等一系列过程。是一种操作简单但使用频率很高的图像处理方法。由于实际的图像索引方式&#xff0c;与我们常用的x和y轴的…

2022年 SecXOps 安全智能分析技术白皮书 学习笔记 免费下载地址

核心能力 为了加快安全分析能力更全面、更深入的自动化 &#xff0c;SecXOps 的目标在于创建一个集成的用于 Security 的 XOps 实践&#xff0c;提升安全分析的场景覆盖率和运营效率。SecXOps 技术并不 015 SecXOps 技术体系 是 Ops 技术在安全领域的简单加和&#xff0c;SecXO…

postman拦截浏览器请求

postman可以去浏览器请求进行拦截&#xff0c;并将请求存放至集合。 原理 postman内部有捕获http请求流量的代理&#xff1b; postman app 监听这客户端程序或者设备发出的调用请求&#xff1b;postman 代理端会捕获到请求并把它转发到服务器&#xff1b;服务器将响应返回给p…

双非大学改考408,软件工程专业考研报考人数较少!

南昌航空大学是一所双非大学&#xff0c;位于江西省南昌市。南昌航空大学计算机学科评估没有&#xff0c;软件工程学科评估C&#xff0c;计算机实力在双非大学中也并不算强。南昌航空大学今年计算机考研大变化&#xff0c;软件学院的所有专业&#xff08;包括&#xff1a;软件工…

虚拟化性能优化系列-numatune

numatune是什么 numatune是libvirt的一个参数&#xff0c;可以用在numa架构的host上&#xff0c;以控制子机的内存访问策略。 使用方法如下&#xff0c;参考libvirt文档 <domain> ... <numatune> <memory mode"strict" nodeset"1-4,^3"/&…

多线程(1)

多线程 前言 &#xff1a; 上文主要了解到了进程&#xff0c; 那么为啥需要引入进程呢&#xff1f;   或者说为啥要有进程呢&#xff1f; 其实这里最主要的目的是为了解决 并发编程 这样的问题。 了解 &#xff1a;   这里 cpu 进入了多核心的时代&#xff0c;想要进一步提…

解决:给 VSCode 手动添加(解压压缩包)相关插件的问题

1、一般的添加方式为&#xff1a; 在 VSCode 里面扩展程序里面直接搜索添加即可&#xff1b; 2、如何手动添加一个 VSCode 相关插件&#xff1f; 其一、首先把相关文件解压&#xff0c;解压成一个文件夹&#xff1b; 其二、找到 VSCode 的 extensions 的地址并把 A 所述文件…

【Java 设计模式】创建者模式 之抽象工厂模式

抽象工厂模式1 概念2 角色3 甜品店案例3.1 类图3.2 实现4 优缺点1 概念 产品族&#xff1a;华为既有华为手机&#xff0c;也有华为电脑、华为平板&#xff0c;华为手机、华为电脑和华为平板属于一个产品族&#xff0c;因为他们都是华为品牌。产品等级&#xff1a;有华为手机&am…

骁龙咣咣咣三脚,再次改写格局

鱼羊 萧箫 发自 凹非寺量子位 | 公众号 QbitAI盆友们&#xff0c;骁龙&#xff0c;已经不再是以前那个骁龙了。就在大家吃瓜安卓新旗舰芯片谁家首发之际&#xff0c;骁龙峰会的绝对主角&#xff0c;却只差没把“时代变了”写在脸上&#xff1a;先是第一天直接挤爆AI牙膏管&…

创建Struts2项目并实现一个例子

文章目录一、创建Struts2项目二、struts2的一个例子一、创建Struts2项目 本人所用idea应用程序。以下全部内容&#xff0c;都是以idea为例 创建项目前&#xff0c;你需要下载Struts2所需要的jar包&#xff0c;你可以直接去官网下载&#xff0c;也可以点击https://pan.baidu.c…

LeetCode - 1419 数青蛙

题目来源 1419. 数青蛙 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个字符串 croakOfFrogs&#xff0c;它表示不同青蛙发出的蛙鸣声&#xff08;字符串 "croak" &#xff09;的组合。由于同一时间可以有多只青蛙呱呱作响&#xff0c;所以 croakOfFrog…

基于蜻蜓优化算法的认知无线电网络的服务质量研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

葡萄糖-聚乙二醇-牛血清白蛋白,BSA-PEG-Glucose,牛血清白蛋白-PEG-葡萄糖

葡萄糖-聚乙二醇-牛血清白蛋白,BSA-PEG-Glucose,牛血清白蛋白-PEG-葡萄糖 牛血清白蛋白&#xff08;BSA&#xff09;&#xff0c;是牛血清中的一种球蛋白&#xff0c;包含607个氨基酸残基&#xff0c;分子量为66.446KDa&#xff0c;可以提供PEG接枝修饰葡萄糖&#xff0c;葡萄…

独家 | 人工智能的记忆与泛化(附链接)

作者&#xff1a;Manuel Brenner 翻译&#xff1a;陈之炎校对&#xff1a;赵茹萱本文约4500字&#xff0c;建议阅读8分钟本文为你介绍了人工智能 记忆与泛化相关知识。标签&#xff1a;人工智能&#xff0c;记忆&#xff0c;泛化“对不可见数据的泛化能力是机器学习的核心。”当…

测试用例设计方法之场景设计法

基本流&#xff1a;采用直黑线表示&#xff0c;是经过用例的最简单的路径&#xff08;无任何差错&#xff0c;程序从开始直接执行到结束&#xff09; 备选流&#xff1a;采用不同颜色表示&#xff0c;一个备选流可能从基本流开始&#xff0c;在某个特定条件下执行&#xff0c;…