python算法与数据结构朋友圈与水杯实验题分析实例

算法与数据结构实验题-朋友圈

实验任务

朋友圈是由若干个人组成的集体,已知现在有n个人(1到n),然后给你m个关系x y,表示x和y是朋友,假设朋友的朋友也是朋友,求这n个人中最大的朋友圈人数。

数据输入

输入第一行为一个正整数n,m。

接下来有m行,每行有两个正整数 x 和 y ,表示 x 和 y 是朋友

60%的数据 1<=n,m<=100.

100%的数据1<=n<=100000.

数据输出

输出n个人中最大的朋友圈人数。

输入示例

3 2
1 2
2 3

输出示例

3

代码实现

rel=int (input().split()[1])
my_list=[]
ne=0
while rel:
 rel-=1
 flag=0
 my_set=set()
 my_cont=[int (n) for n in input().split()]
 for n in range(len(my_list)):
 if my_cont[0] in my_list[n]:
 my_list[n].add(my_cont[1])
 flag=1
 ne=n
 continue
 if (my_cont[1] in my_list[n]) and flag==0:
 my_list[n].add(my_cont[0])
 flag = 1
 break
 elif (my_cont[1] in my_list[n]) and flag==1:
 my_list[n]=my_list[n].union(my_list[ne])
 my_list.remove(my_list[ne])
 if flag==0:
 my_set.add(my_cont[0])
 my_set.add(my_cont[1])
 my_list.append(my_set)
ans=0
for n in my_list:
 ans=max(ans,len(n))
print(ans)

tips:union返回一个新的集合,需要赋值

效果展示

算法与数据结构实验题-水杯

实验任务

有n个水杯叠放在一起

从上到下,编号由1开始一直到n,容量ai不一定满足也依次增大的关系,如果i号杯子存的水超过了它的容量,则会像i+1号水杯流,以此类推

现在给你两个操作

操作一: 1 x y 给x号杯子加y容量的水

操作二: 2 x 查询x杯子里有多少水。

数据输入

输入第一行为一个正整数n

接下来n个元素,表示第i个水杯的容量

接着输入操作的个数q

接下来q行操作。

60%的数据 1<=n<=100,1<=q<=100,1<=ai,y<=100.

100%的数据1<=n<=100000,1<=q<=100000,1<=ai,y<=1000000000.

数据输出

对于每个操作二,输出对应的值。

输入示例

2
5 10
6
1 1 4
2 1
1 2 5
1 1 4
2 1
2 2

输出示例

4
5
8

代码实现

def action(x,n):
 while n>0 and x<=num:
 if my_cup[x]>=n:
 my_cup[x]-=n
 n=0
 else:
 n-=my_cup[x]
 my_cup[x] = 0
 x+=1
num=int (input())
my_cup=[int (n) for n in input().split()]
old=my_cup.copy()
act=int (input())
while act:
 act-=1
 cont=[int (n) for n in input().split()]
 if cont[0]==1:
 action(cont[1]-1,cont[2])
 if cont[0]==2:
 print(old[cont[1]-1]-my_cup[cont[1]-1])

注释:这里的old列表需要用到copy函数进行浅拷贝操作(没有出现嵌套所以不同考虑深拷贝),若是直接赋值则会导致my_cup改变时old也跟着改变。本代码输出为实时输出

效果展示

作者:coleak原文地址:https://blog.csdn.net/qq_63701832/article/details/127926479

%s 个评论

要回复文章请先登录注册