先画出一个矩阵,\((i,j)\)上的数为\(i*x+j*y\),发现只要某一行的第一列的数曾经出现过,就说明已经计算完了,证明感觉挺显然的,自己画一下就可以看出来。
这种不太好处理的权值可以转化为联通块问题然后求直径,每次将枚举的\(gcd\)的倍数边加到图上。
用线段树维护栈,与维护单调栈类似。