結果
問題 |
No.2100 [Cherry Alpha C] Two-way Steps
|
ユーザー |
![]() |
提出日時 | 2025-05-10 00:50:09 |
言語 | Go (1.23.4) |
結果 |
AC
|
実行時間 | 248 ms / 2,000 ms |
コード長 | 1,189 bytes |
コンパイル時間 | 12,381 ms |
コンパイル使用メモリ | 236,604 KB |
実行使用メモリ | 16,588 KB |
最終ジャッジ日時 | 2025-05-10 00:50:32 |
合計ジャッジ時間 | 21,464 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 48 |
ソースコード
package main import . "fmt" import . "os" import bf "bufio" func main() { rd := bf.NewReader(Stdin) var n,m int Fscan(rd,&n,&m) h := make([]int, n+1) for i := range h[1:] { Fscan(rd,&h[i+1]) } g := make([][]int, n+1) for i := 0; i < m; i++ { var x, y int Fscan(rd,&x,&y) g[x] = append(g[x], y) g[y] = append(g[y], x) } dp0 := make([]int, n+1) dp1 := make([]int, n+1) for i := range dp0 { dp0[i] = -1 dp1[i] = -1 } dp0[1] = 0 for i := 1; i < n; i++ { if dp0[i] < 0 && dp1[i] < 0 { continue } for _, e := range g[i] { if e < i { continue } if h[i] > h[e] { dp0[e] = max(dp0[e], dp0[i], dp1[i]) } else if dp0[i] >= 0 { dp1[e] = max(dp1[e], dp0[i]+(h[e]-h[i])) } } } Println(max(dp0[n], dp1[n])) dp0 = make([]int, n+1) dp1 = make([]int, n+1) for i := range dp0 { dp0[i] = -1 dp1[i] = -1 } dp0[n] = 0 for i := n; i > 1; i-- { if dp0[i] < 0 && dp1[i] < 0 { continue } for _, e := range g[i] { if e > i { continue } if h[i] > h[e] { dp0[e] = max(dp0[e], dp0[i], dp1[i]) } else if dp0[i] >= 0 { dp1[e] = max(dp1[e], dp0[i]+(h[e]-h[i])) } } } Println(max(dp0[1], dp1[1])) }