2024年最新【Python 百练成钢】快速上手并查集(2),Python面试简历模板

简介: 2024年最新【Python 百练成钢】快速上手并查集(2),Python面试简历模板

💗问题描述💗

Problem Description

某省调查城镇交通状况,得到现有城镇道路统计表,

表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通

(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?

Input

测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M;

随后的M行对应M条道路,每行给出一对正整数,分别是该条道路直接连通的两个城镇的编号。为简单起见,城镇从1到N编号。

注意:两个城市之间可以有多条道路相通,也就是说

3 3

1 2

1 2

2 1

这种输入也是合法的

当N为0时,输入结束,该用例不被处理。

Output

对每个测试用例,在1行里输出最少还需要建设的道路数目。

Sample Input

4 2

1 3

4 3

3 3

1 2

1 3

2 3

5 2

1 2

3 5

999 0

0

Sample Output

1

0

2

998

Huge input, scanf is recommended.

💗问题分析💗

典型的使用并查集进行解决的问题,先将并查集建立起来,然后判断有几个根节点

有n个根节点就需要再修建n-1条路将其连接起来。

💗代码实现💗

def init(n):
return {k:k for k in range(1,n+1)}
def find(mem,n):
while mem[n]!=n:
n=mem[n]
return n
def union(mem,a,b):
t1=find(mem,a)
t2=find(mem,b)
if t1!=t2:
mem[t1]=t2
ans=[]
while True:
ls=list(map(int,input().split()))
if ls[0]==0:
break
mem=init(ls[0])
side=[list(map(int,input().split())) for i in range(ls[1])]
for i in side:
if find(mem,i[0])!=find(mem,i[1]):
union(mem,i[0],i[1])
ans.append(len([i for i in mem if mem[i]==i])-1)

这里减去1是因为len之后是树的个数,而需要添加的边应比树的数目少1即可。

for i in ans:
print(i)

🌺合根植物🌺



💗问题描述💗

w星球的一个种植园,被分成m * n个小格子(东西方向m行,北方向n列)。每个格子里种了-株合根植物。

这种植物有个特点,它的根可能会沿着南北或东西方向伸展,从而与另一个格子的植物合成为-体。

如果我们告诉你哪些小格子间出现了连根现象,你能说出这个园中-共有多少株合根植物吗?

输入格式:

第一行,两个整数m, n,用空格分开,示格子的行数、列数(1

接下来一行,一个整数k,示下面还有k行数据(0

接下来k行,第行两个整数a, b,表示编号为a的小格子和编号为b的小格子合根了。

格子的编号一行一 行,从上到下,从左到右编号。

比如: 5* 4的小格子,编号:

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

17 18 19 20

样例输入:

5 4

16

2 3

1 5

5 9

4 8

7 8

9 10

10 11

11 12

10 14

12 16

14 18

17 18

15 19

19 20

9 13

13 17

样例输出

5

💗问题分析💗

题目问的是有几个合根植物,那么就是问的在这篇森林中有几颗子树

我们可以将边集中的所有点进行合并,最后判断根节点的个数得出答案

💗代码实现💗

def init(n):
return {k:k for k in range(1,n+1)}
def find(mem,a):

到了根节点

while mem[a]!=a:

路径压缩

mem[a]=mem[mem[a]]
a=mem[a]
return a
def union(mem,a,b):
mem[find(mem,a)]=mem[find(mem,b)]
m,n=map(int,input().split())
k=int(input())
mem=init(m*n)
ls=[list(map(int,input().split())) for i in range(k)]
for i in ls:
union(mem,i[0],i[1])
print(len([i for i in mem if mem[i]==i]))

🌺远方的亲戚🌺



💗问题描述💗

例子:现在有若干家族图谱关系,给出了一些亲戚关系,如Marry和Tom是亲戚, Tom和Ben是亲戚等等。 从这些信息中,你可以推

导出Marry和Ben是亲戚。请写-一个程序,对于我们的关于亲戚关系的提问,以最快速度给出答案。

[输入格式]

第一部分是以N,M开始。N为人数(1<=N<=20000),这 些人的编号为1 ,2,…N。.下面有M行(1<=M<= 000000),每行有两个数a,b,表

示a和b是亲戚。

第二部分是以Q开始。以下Q行有Q个询问(1<=Q<=1000000),每行为c,d,表示询问c和d是否为亲戚。

[输出格式]

对于询问c,d,输出一行:若c,d为亲戚,则输出"YES",否则输出"NO"

[输入样例]

10 7

2 4

5 7

1 3

8 9

1 2

5 6

2 3

3

3 4

7 10

8 9

[输出样例]

YES

NO

YES

💗问题分析💗

这个题目更加简单,就是判断一下两个节点的根节点是否相同

如果相同的话有亲属关系,否则没有亲属关系。

💗代码实现💗

def init(m):
return {k:k for k in range(1,m+1) }
def find(mem,n):
while mem[n]!=n:
n=mem[n]
return n
def union(memls,a,b):
t1=find(mem,a)
t2=find(mem,b)
if t1!=t2:
memls[t1]=t2

键入人数与关系数

m,n=map(int,input().split())

初始化关系树

mem=init(m)

键入n组关系

ls1=[list(map(int,input().split())) for i in range(n)]

测试数据

做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。

别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。

我先来介绍一下这些东西怎么用,文末抱走。


(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

(4)200多本电子书

这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。

基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。

(5)Python知识点汇总

知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。

(6)其他资料

还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。

相关文章
|
24天前
|
JSON JavaScript 前端开发
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
本文介绍了JSONP的工作原理及其在解决跨域请求中的应用。首先解释了同源策略的概念,然后通过多个示例详细阐述了JSONP如何通过动态解释服务端返回的JavaScript脚本来实现跨域数据交互。文章还探讨了使用jQuery的`$.ajax`方法封装JSONP请求的方式,并提供了具体的代码示例。最后,通过一个更复杂的示例展示了如何处理JSON格式的响应数据。
30 2
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
|
2月前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
2月前
|
消息中间件 前端开发 NoSQL
面试官最反感这样的简历!
面试官最反感这样的简历!
44 0
面试官最反感这样的简历!
|
2月前
|
Java C++ Python
【面试宝典】深入Python高级:直戳痛点的题目演示(下)
【面试宝典】深入Python高级:直戳痛点的题目演示(下)
|
2月前
|
设计模式 Unix Python
【面试宝典】深入Python高级:直戳痛点的题目演示(上)
【面试宝典】深入Python高级:直戳痛点的题目演示(上)
|
4月前
|
前端开发 JavaScript 数据库
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
|
4月前
|
SQL 存储 关系型数据库
|
4月前
|
JavaScript Java Python
【Azure 应用服务】在Azure App Service for Windows 中部署Java/NodeJS/Python项目时,web.config的配置模板内容
【Azure 应用服务】在Azure App Service for Windows 中部署Java/NodeJS/Python项目时,web.config的配置模板内容
|
5月前
|
中间件 数据库 开发者
解析Python Web框架的四大支柱:模板、ORM、中间件与路由
【7月更文挑战第20天】Python Web框架如Django、Flask、FastAPI的核心包括模板(如Django的DTL和Flask的Jinja2)、ORM(Django的内置ORM与Flask的SQLAlchemy)、中间件(Django的全局中间件与Flask的装饰器实现)和路由(Django的urls.py配置与Flask的@app.route()装饰器)。这些组件提升了代码组织和数据库操作的便捷性,确保了Web应用的稳定性和可扩展性。
66 0
|
5月前
|
Python
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题