题意
一张 n n n 个点 m m m 条边的无向图, 点从 1 1 1 到 n n n 编号, 每条边有权值 t [ i ] t[i] t[i]。
有 q q q 组询问,每组询问形如 “ u v K u~v~K u v K”,表示询问从 u u u 到 v v v 的所有路径中,权值和 m o d K mod~K mod K 的最小值是多少。
Subtask1(13 points): K K K 均为奇数
Subtask2(23 points): n , m , q , K ≤ 300 n,m,q,K≤300 n,m,q,K≤300
Subtask3(29 points): t [ i ] t[i] t[i]均为 1 1 1 且 K K K 均为 2 2 2
Subtask4(35 points):无特殊限制
对于所有数据: 1 ≤ n , m , q ≤ 1 0 5 , 1 ≤ [ i ] ≤ 1 0 9 , 2 ≤ K ≤ 1 0 9 , u ≠ v 1≤n,m,q≤10^5 , 1\le[i]\le10^9,2≤K≤10^9,u≠v 1≤n,m,q≤105,1≤[i]≤109,2≤K≤109,u=v
题解
其实是很可做的一道题啊,测试的时候一看觉得不可做,想了想第一个子任务觉得很劝退,就放弃了。到最后才想了一下第三个子任务还写挂暴零了。。。
第一个子任务直接输出0,沿着任意一条路来回走k个单程即可(为什么完全没想到啊我是弱智)。
其实第三个子任务的方向就是正解了:首先这个子任务显然连通块内有奇环答案就是0,否则就是生成树上的路径长度%2。这提示我们是不是连通块内的每个环都有贡献:比较麻烦的是要走到这个环再走回来,于是不妨把往返同一条无向边也看作一个环,这样前面的过程也相当于经过了一个环,且次数是任意的。所以任何一个环的贡献就是把K和它的环长取gcd。这样,求出任意生成树上u到v的路径,这里还有一个小问题:可能跳过路径上一些点,但发现这其实相当于少了这些点的简单路径往返的环再加上一个新的环,于是直接把路径长度%取完gcd后的k即可。