結果
| 問題 |
No.2100 [Cherry Alpha C] Two-way Steps
|
| コンテスト | |
| ユーザー |
ID 21712
|
| 提出日時 | 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]))
}
ID 21712