现在小强想从一个城市走到另一个不同的城市,并且每条边经过至多一次,同时他还有一个要求,起点和终点城市可以任意选择,但是等级必须是相同的。
但是小强不喜欢走特别远的道路,所以他想知道时间花费最小是多少。
进阶:时间复杂度,空间复杂度
第一行一个正整数 ,含义如题面所述。
第二行 个正整数 ,代表每个城市的等级。
接下来 行每行两个正整数 ,代表一条无向边。
保证给出的图是一棵树。
。
。
。
仅一行一个整数代表答案,如果无法满足要求,输出 。
3 1 2 1 1 2 2 3
2
import collections n = int(input()) edge = [[] for i in range(n)] a=list(map(int, input().split())) for i in range(n-1): x,y = map(int, input().split()) edge[x-1].append(y-1) edge[y-1].append(x-1) ans = n d = collections.defaultdict(list) for i in range(n): d[a[i]].append(i) if len(d)==len(a): print(-1) else: for k,v in d.items(): if len(v)==1: continue else: for root in v: stack = [root] deep = 0 visited=set() while stack: tmp = [] while stack: node = stack.pop() visited.add(node) if a[node]==a[root] and node!=root: ans = min(ans, deep) break for i in edge[node]: if i not in visited: tmp.append(i) deep+=1 stack = tmp.copy() if deep>=ans: break print(ans)