图论
邻接表
建无向图的时候,add(a,b), add(b,a)
,所以每条边都是成对的,即编号 \((0,1)、(2,3)、(4,5) \dots\) 是一组
(正向边,反向边), 所以如果 \(i\)
是正向边,那么它的反向边就是 \(i \oplus
1\)
1 | int h[N], e[M], w[M], ne[M], idx; |
建无向图的时候,add(a,b), add(b,a)
,所以每条边都是成对的,即编号 \((0,1)、(2,3)、(4,5) \dots\) 是一组
(正向边,反向边), 所以如果 \(i\)
是正向边,那么它的反向边就是 \(i \oplus
1\)
1 | int h[N], e[M], w[M], ne[M], idx; |
以查询区间最大值为例:
由分治的思想可知:区间 \([L,R]\)
的最大值等于 \(\max([L, M], [M + 1,
R])\)
在区间 \([1,n]\) 上建线段树,以区间
\([1, 10]\) 为例,如图: