package main import . "fmt" import . "os" import bf "bufio" import . "sort" func main() { rd := bf.NewReader(Stdin) var n,m int Fscan(rd,&n,&m) ds := make(map[int]int) graph := make([][]int,n) for i := 0; i < m; i++ { var s,t,d int Fscan(rd,&s,&t,&d) s-- t-- k := min(s,t)*n+max(s,t) if r, found := ds[k]; found { ds[k] = max(r, d) } else { ds[k] = d graph[s] = append(graph[s], t) graph[t] = append(graph[t], s) } } bfs := func(v int) int { visited := make([]bool, n) visited[0] = true cur := []int{0} cnt := 0 for len(cur) > 0 { cnt++ tmp := []int{} p := cur[0] cur = cur[1:] for _, e := range graph[p] { if visited[e] { continue } k := min(p,e)*n+max(p,e) if ds[k] < v { continue } if e == n-1 { return cnt } visited[e] = true tmp = append(tmp, e) } cur = tmp } return -1 } overW := Search(1e9+2, func(v int) bool { return bfs(v) < 0 }) w := overW-1 Println(w, bfs(w)) } /* 考察 wを二分探索で決め打ちしてルートを幅優先探索する典型問題ぽい? */