INF = 1000 * 1000 * 100
def find_pair_combination(vertexes):
if not vertexes:
return 0
ans = INF
for i in range(1, len(vertexes)):
ans = min(ans, dist[vertexes[0]][vertexes[i]] + find_pair_combination(vertexes[1:i] + vertexes[i + 1:]))
return ans
def build_dijskatra(dist):
for a in range(n): for x in range(n):
for y in range(n):
dist[x][y] = min(dist[x][y], dist[x][a] + dist[a][y])
return dist
n, m = map(int, input().split())
graph = [[] for _ in range(n)]
_sumEdgeWeight = 0
matr = [[INF] * n for _ in range(n)]
for i in range(m):
a, b, w = map(int, input().split())
_sumEdgeWeight += w
graph[a - 1].append((b - 1, w))
graph[b - 1].append((a - 1, w))
matr[a - 1][b - 1] = matr[b - 1][a - 1] = min(matr[a - 1][b - 1], w)
odd = list(a for a in range(n) if len(graph[a]) % 2)
dist = build_dijskatra(matr)
result = find_pair_combination(odd)
if result < INF and max([0] + [dist[0][a] for a in range(1, n) if len(graph[a]) > 0]) < INF: print(result + _sumEdgeWeight)
else:
print(-1)
470. Implement Rand10() Using Rand7() | 866. Prime Palindrome |
1516A - Tit for Tat | 622. Design Circular Queue |
814. Binary Tree Pruning | 791. Custom Sort String |
787. Cheapest Flights Within K Stops | 779. K-th Symbol in Grammar |
701. Insert into a Binary Search Tree | 429. N-ary Tree Level Order Traversal |
739. Daily Temperatures | 647. Palindromic Substrings |
583. Delete Operation for Two Strings | 518. Coin Change 2 |
516. Longest Palindromic Subsequence | 468. Validate IP Address |
450. Delete Node in a BST | 445. Add Two Numbers II |
442. Find All Duplicates in an Array | 437. Path Sum III |
436. Find Right Interval | 435. Non-overlapping Intervals |
406. Queue Reconstruction by Height | 380. Insert Delete GetRandom O(1) |
332. Reconstruct Itinerary | 368. Largest Divisible Subset |
377. Combination Sum IV | 322. Coin Change |
307. Range Sum Query - Mutable | 287. Find the Duplicate Number |