【华为OD机试真题 python】城市聚集度

2024-01-09 01:10

本文主要是介绍【华为OD机试真题 python】城市聚集度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【城市聚集度】

一张地图上有n个城市,城市和城市之间有且只有一条道路相连:要么直接相连,要么通过其它城市中转相连(可中转一次或多次)。城市与城市之间的道路都不会成环

当切断通往某个城市 i 的所有道路后,地图上将分为多个连通的城市群,设该城市i的聚集度为DPi(Degree of Polymerization),DPi = max(城市群1的城市个数,城市群2的城市个数,…城市群m 的城市个数)。

请找出地图上DP值最小的城市(即找到城市j,使得DPj = min(DP1,DP2 … DPn))

提示:如果有多个城市都满足条件,这些城市都要找出来(可能存在多个解

提示:DPi的计算,可以理解为已知一棵树,删除某个节点后;生成的多个子树,求解多个子数节点数的问题。

输入描述:

每个样例:第一行有一个整数N,表示有N个节点。1 <= N <= 1000。

接下来的N-1行每行有两个整数x,y,表示城市x与城市y连接。1 <= x,  y <= N

输出描述:

输出城市的编号。如果有多个,按照编号升序输出。

示例1   输入输出示例仅供调试,后台判题数据一般不包含示例

输入

5
1 2
2 3
3 4
4 5

输出

3

说明

输入表示的是如下地图:

对于城市3,切断通往3的所有道路后,形成2个城市群[(1,2),(4,5)],其聚集度分别都是2。DP3 = 2。

对于城市4,切断通往城市4的所有道路后,形成2个城市群[(1,2,3),(5)],DP4 = max(3,1)= 3。

依次类推,切断其它城市的所有道路后,得到的DP都会大于2,因为城市3就是满足条件的城市,输出是3。

示例2   输入输出示例仅供调试,后台判题数据一般不包含示例

输入

6
1 2
2 3
2 4
3 5
3 6

输出

2 3

说明

将通往2或者3的所有路径切断,最大城市群数量是3,其他任意城市切断后,最大城市群数量都比3大,所以输出2 3


class DSU:def __init__(self, number):self.root_relation_List = [-1] * (number + 1)  # 定义城市之间的连接关系node是城市标号的话那么self.root_relation_List[node]就是该城市的根节点,如果根节点为自己那么该值为-1def root_node_find(self, node):  # 查找根节点while self.root_relation_List[node] != -1:node = self.root_relation_List[node]return nodedef node_connected(self, node1, node2):  # 连接节点node1_root = self.root_node_find(node1)node2_root = self.root_node_find(node2)if node1_root != node2_root:self.root_relation_List[node1_root] = node2_rootreturndef max_city(self, node, number, ls):ls2 = ls.copy()  # 每次调用都要重新给ls2赋值self.__init__(number)  # 重置节点连接的关系for i in range(len(ls2)):  # 删除节点(断开i城市与其他城市的连接)if node in ls2[i]:ls2[i] = " "while " " in ls2:ls2.remove(" ")for j in ls2:self.node_connected(j[0], j[1])dic = {}for k in range(1, number+1):  # 删除其中某个节点(断开与这个城市连接的所有城市)后 找出各根节点城市群的数目并添加进字典dic[self.root_node_find(k)] = dic.get(self.root_node_find(k), 0) + 1return node, max(dic.values())  # 返回断开的城市节点和断开此城市节点后产生的最大的城市群数目number = int(input())
dsu = DSU(number)
ls = []
for i in range(number-1):ls.append([int(j) for j in input().split() if int(j) <= number])
ls1 = []
for i in range(1, number+1):  # 尝试断开每一个城市节点并得到产生的最大城市群的数目ls1.append(dsu.max_city(i, number, ls))  # 将该城市节点和断开该节点后所产生的最大城市群的数目写入元组并添加进列表min_num = min([s[1] for s in ls1])  # 找到列表中最小的城市群
for k in ls1:  # 找到所有最小城市群对应的城市节点if k[1] == min_num:print(k[0], end=' ')

这篇关于【华为OD机试真题 python】城市聚集度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/585457

相关文章

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python ZIP文件操作技巧详解

《PythonZIP文件操作技巧详解》在数据处理和系统开发中,ZIP文件操作是开发者必须掌握的核心技能,Python标准库提供的zipfile模块以简洁的API和跨平台特性,成为处理ZIP文件的首选... 目录一、ZIP文件操作基础三板斧1.1 创建压缩包1.2 解压操作1.3 文件遍历与信息获取二、进阶技

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

Python中的getopt模块用法小结

《Python中的getopt模块用法小结》getopt.getopt()函数是Python中用于解析命令行参数的标准库函数,该函数可以从命令行中提取选项和参数,并对它们进行处理,本文详细介绍了Pyt... 目录getopt模块介绍getopt.getopt函数的介绍getopt模块的常用用法getopt模

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.