题面
需要解释一下:有 K K K 张图,每一张图 N i N_i Ni 个节点,构成新图,有 ∏ i ∈ [ 1 , K ] N i \prod_{i\in[1,K]}{N_i} ∏i∈[1,K]Ni 个节点,节点用 ( i 1 , i 2 , … , i K ) (i_1,i_2,\dots,i_K) (i1,i2,…,iK) 表示,对于边 ∃ ( i 1 , i 2 , … , i K ) → ( j 1 , j 2 , … , j K ) ⟺ ∀ k ∈ [ 1 , K ] , ∃ i k → j k ( i k , j k ∈ [ 1 , N k ] ) \exist\;(i_1,i_2,\dots,i_K)\to(j_1,j_2,\dots,j_K)\iff \forall k\in[1,K],\exist\;i_k\to j_k(i_k,j_k\in[1,N_k]) ∃(i1,i2,…,iK)→(j1,j2,…,jK)⟺∀k∈[1,K],∃ik→jk(ik,jk∈[1,Nk])。求在新图中,从 ( 1 , 1 , … , 1 ) (1,1,\dots,1) (1,1,…,1) 能走到的节点的距离和。
分析
特别抽象,甚至让我写暴力我都不一定能很优雅地搞出来。不妨先简化问题为
K
=
2
K=2
K=2。此时考虑
(
1
,
1
)
→
(
a
,
b
)
(1,1)\to(a,b)
(1,1)→(a,b),为方便区分,用
(
a
s
,
b
s
)
→
(
a
t
,
b
t
)
(a_s,b_s)\to(a_t,b_t)
(as,bs)→(at,bt) 表示。此时
a
,
b
a,b
a,b 分别表示一个原图,我们可以求出
d
1
=
d
i
s
(
a
s
,
a
t
)
d1=dis(a_s,a_t)
d1=dis(as,at) 和
d
2
=
d
i
s
(
b
s
,
b
t
)
d2=dis(b_s,b_t)
d2=dis(bs,bt)。在新图中两边需要同时走,因此只有
d
1
d1
d1 与
d
2
d2
d2 奇偶性相同时才可走到,即(记
o
d
k
=
d
i
s
_
o
d
d
(
k
s
,
k
t
)
,
e
d
k
=
d
i
s
_
e
v
e
n
(
k
s
,
k
t
)
od_k=dis\_odd(k_s,k_t),ed_k=dis\_even(k_s,k_t)
odk=dis_odd(ks,kt),edk=dis_even(ks,kt))
d
i
s
(
(
a
s
,
b
s
)
,
(
a
t
,
b
t
)
)
=
m
i
n
(
m
a
x
(
o
d
a
,
o
d
b
)
,
m
a
x
(
e
d
a
,
e
d
b
)
)
dis((a_s,b_s),(a_t,b_t))=min(max(od_a,od_b),max(ed_a,ed_b))
dis((as,bs),(at,bt))=min(max(oda,odb),max(eda,edb)) 假如以正无穷表示无法走到的情况,等式依然成立。
考虑去化简式子(让它便于运算),首先我们知道
m
i
n
(
x
,
y
)
=
x
+
y
−
m
a
x
(
x
,
y
)
min(x,y)=x+y-max(x,y)
min(x,y)=x+y−max(x,y),那么可以使用在这里,即
d
i
s
(
(
a
s
,
b
s
)
,
(
a
t
,
b
t
)
)
=
m
a
x
(
o
d
a
,
o
d
b
)
+
m
a
x
(
e
v
a
,
e
v
b
)
−
m
a
x
(
o
d
a
,
e
d
a
,
o
d
b
,
e
d
b
)
dis((a_s,b_s),(a_t,b_t))=\\max(od_a,od_b)+max(ev_a,ev_b)-max(od_a,ed_a,od_b,ed_b)
dis((as,bs),(at,bt))=max(oda,odb)+max(eva,evb)−max(oda,eda,odb,edb) 继而便可以求答案了,这里直接拓展到
K
K
K 为任意值的情况,读者也可以自己推一下,道理是相同的。
a
n
s
=
∑
m
a
x
i
∈
[
1
,
K
]
o
d
i
,
t
=
k
i
+
∑
m
a
x
i
∈
[
1
,
K
]
e
d
i
,
t
=
k
i
−
∑
m
a
x
i
∈
[
1
,
K
]
(
o
d
i
,
t
=
k
i
,
e
d
i
,
t
=
k
i
)
ans=\\\sum{max_{i\in[1,K]}od_{i,t=k_i}}\\+\sum{max_{i\in[1,K]}ed_{i,t=k_i}}\\-\sum{max_{i\in[1,K]}(od_{i,t=k_i},ed_{i,t=k_i})}
ans=∑maxi∈[1,K]odi,t=ki+∑maxi∈[1,K]edi,t=ki−∑maxi∈[1,K](odi,t=ki,edi,t=ki) 感觉比较难规范地表示出来,
k
x
k_x
kx 表示的是第
x
x
x 张图中任意一点,
∀
x
∈
[
1
,
K
]
,
k
x
∈
[
1
,
N
x
]
{\forall x\in[1,K],k_x\in[1,N_x]}
∀x∈[1,K],kx∈[1,Nx]。即
m
a
x
max
max 是对于每一张图的任意一个点的组合
∀
(
r
1
,
r
2
,
…
,
r
K
)
,
r
i
∈
[
1
,
N
i
]
\forall(r_1,r_2,\dots,r_K),r_i\in[1,N_i]
∀(r1,r2,…,rK),ri∈[1,Ni] 而言的。
涉及算法
组合计数,bfs,逆元
实现
单个图求最短奇偶路径使用简单的 bfs
。难点在于求
∑
m
a
x
a
i
,
j
,
…
\sum{max{\;a_{i,j,\dots}}}
∑maxai,j,… 这样的东西。考虑将
a
a
a 降序排序,枚举到一个数时计算包含这个数,且此数最大的组合方案数,即除去这个数所在图外,其他图中比它小的数的个数的乘积。排序并且线性维护,
O
(
n
log
n
+
n
)
\mathcal{O(n\log n+n)}
O(nlogn+n)。桶排可以
O
(
n
)
\mathcal{O(n)}
O(n) 实现,但是我不会写。
特别地,要注意不要计算那些距离正无穷的情况。