[解题报告]Time Needed to Inform All Employees

题目链接
给定一个树形关系结构
只有一个根节点headID
求从headID到叶子节点的最长路径

反向去想,以每个叶子节点为起点,累加其到达headID节点的权重,若累加过程发现到达点x累积权重没有别的叶子节点经过x节点的权重高,则停止累积
有一些最短路的思想
若有N个节点
时间复杂度
O(N ^ 2)

func numOfMinutes(n int, headID int, manager []int, informTime []int) int {
	costs := make([]int, len(manager))
	exist := make([]bool, len(manager))

	for _, v := range manager {
		if v == -1 {
			exist[headID] = true
		} else {
			exist[v] = true
		}
	}

	var calcCosts func(src int)
	calcCosts = func(src int) {
		if src == headID {
			return
		}
		if informTime[manager[src]] + costs[src] > costs[manager[src]] {
			costs[manager[src]] = informTime[manager[src]] + costs[src]
			calcCosts(manager[src])
		}
	}

	for i, v := range exist {
		if !v {
			calcCosts(i)
		}
	}

	return costs[headID]
}
发布了15 篇原创文章 · 获赞 2 · 访问量 1344

猜你喜欢

转载自blog.csdn.net/yeehok/article/details/104878659
ALL