23.8.13米哈游秋招笔试题记录

第一题

签到题easy

第二题

// 给出一颗有根树,树上有n个节点和n-1条边,边的距离为1. 根节点编号为1.
// 根据上述构建出这棵有根树。
// 然后,进行任意次操作:
// 操作内容:对于树的叶子节点添加一个叶子节点,新添加边长度也是1.
// 问经过操作以后,使得这棵树中所有节点与根节点的距离不超过k的最大值是多少?
// 输入n,k,以及各个边输出满足条件的节点个数
//4 2
//1 2
//1 3
//2 4
//输出
//5
import sys
sys.setrecursionlimit(1000000000)
n,k = list(map(int, input().split()))
G = [[] for i in range(n)]
for i in range(n-1):
u,v = list(map(int, input().split()))
G[u-1].append(v-1)
G[v-1].append(u-1)
def dfs(cur,depth,parent):
if depth > k:
return 0
ans = 1
if len(G[cur]) > 1 or parent == -1:
for nei in G[cur]:
if nei != parent:
ans += dfs(nei,depth+1,cur)
else:
ans += max(0,k-depth)
return ans
print(dfs(0,0,-1))

其实就是求树满足要求的叶子节点个数每个叶子节点根据深度可以添加k-depth个节点。上面给出的是牛客看到的一位大佬比较简洁的代码@TaylorSwift13

第三题

image

posted @   ArthurFleck  阅读(172)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示