AtCoder Beginner Contest 238 E - E - Range Sums(建图)
题目大意:
给定一些区间的和,判断是否可以在其中选择一些区间,使得可以通过这些区间的和算出 1 到 的区间和。
思路:
考虑将 看成点,对于 的区间和,相当于建一条 到 的边。那么要想算出 1 到 的区间和,就看能不能从 0 经过一条路径到达 。
如何理解这样的建图?
看样例1
Sample Input 1
3 3
1 2
2 3
2 2
Sample Output 1
Yes
From the first and second information, we can find the value . By subtracting the value of from it, we can determine the value .
这里提到的减去区间的和,在图上相当于抵消掉重叠的边。
Code:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var n, q int
fmt.Fscan(in, &n, &q)
g := make([][]int, n+1)
for i := 0; i < q; i++ {
var l, r int
fmt.Fscan(in, &l, &r)
g[l-1] = append(g[l-1], r)
g[r] = append(g[r], l-1)
}
vis := make([]bool, n+1)
ok := false
var dfs func(u, fa int)
dfs = func(u, fa int) {
if u == n || ok {
ok = true
return
}
if vis[u] {
return
}
vis[u] = true
for _, v := range g[u] {
if v != fa {
dfs(v, u)
}
}
}
dfs(0, -1)
if ok {
fmt.Fprintln(out, "Yes")
} else {
fmt.Fprintln(out, "No")
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】