题目描述:
你可以进行任意次数操作,问是否存在合法的操作使得所有的边权\(w_{i}^{1}\)都变为它对应的期望边权\(w_{i}^{2}\) \(n \leq 10^{5}\) 且 \(n\) 为奇数, \(0 \leq w_{i}^{1},w_{i}^{2} < 2^{30}\) 蒟蒻题解 定义\(d_{u,v}\)表示\(u\)到\(v\)的简单路径上所有边的权值的异或和(这个想法是我之前没怎么接触到的),\(f_{u,v}\)表示\(u\)到\(v\)的简单路径上所有边的期望权值的异或和 当对边\((a,b)\)进行操作时
假设对以点\(u\)为端点的所有边的操作异或起来记为\(W\),那么如果答案有解,那么对于任意点\(a\),一定存在\(d_{u,a} \bigoplus W = f_{u,b}\),且\(a\)和\(b\)两两配对 如果存在满足条件的\(W\),由于\(n\)是奇数,所有易得\(W = d_{u,1} \bigoplus d_{u,2} \bigoplus ··· \bigoplus d_{u,n} \bigoplus f_{u,1} \bigoplus f_{u,2} \bigoplus ··· \bigoplus f_{u,n}\) 那么题目可以转换为:是否存在合法操作,使得对于任意点\(u\),以\(u\)为端点的边的操作异或能构成\(W\),且\(d_{u,a} \bigoplus W\)和\(f_{u,b}\)两两对应相等 假设对于一个点\(u\),想要判断是否存在操作能来构成\(W\)不太好做,我们可以先看看后面的要求:要满足\(d_{u,a} \bigoplus W\)和\(f_{u,b}\)两两对应相等 由于我们已知\(W = d_{u,1} \bigoplus d_{u,2} \bigoplus ··· \bigoplus d_{u,n} \bigoplus f_{u,1} \bigoplus f_{u,2} \bigoplus ··· \bigoplus f_{u,n}\),那么\(d_{u,a} \bigoplus W = f_{u,b}\)就相当于\(d_{u,a} \bigoplus W \bigoplus f_{u,b} = 0\),即将构成\(W\)的一系列异或值去掉\(d_{u,a}\)和\(f_{u,b}\),其他值异或起来为\(0\),也就是说\(d_{u,1} \bigoplus d_{u,2} \bigoplus ··· \bigoplus d_{u,a-1} \bigoplus d_{u,a+1} \bigoplus ··· \bigoplus d_{u,n} = f_{u,1} \bigoplus f_{u,2} \bigoplus ··· \bigoplus f_{u,b-1} \bigoplus f_{u,b+1} \bigoplus ··· \bigoplus f_{u,n}\),也就是说,我们能用若干\(d_{u,x}\)去表示\(f_{u,y}\),原本构成\(W\)需要\(d\)和\(f\),可以全部转换成\(d\)的形式,所以如果满足\(d_{u,a} \bigoplus W\)和\(f_{u,b}\)两两对应相等,那么\(W\)也能被构建出来 但是一共有\(n\)个点,每个点都去判断一次,单次判断复杂度是\(O(nlog\ n)\),总的复杂度是\(O(n^{2}log\ n)\)的 不妨去试一下,一个点成立,能否推广到其他点也成立 若\(u\)满足条件,那么假设\(v\)与\(u\)有连边,这条边的初始权值为\(w ^ {1}\),期望权值为\(w ^{2}\),那么\(d_{v,a} = d_{u,a} \bigoplus w ^ {1}\),\(f_{v,a} = f_{u,a} \bigoplus w ^ {2}\),\(W_{v} = W_{u} \bigoplus w ^ {1} \bigoplus w ^ {2}\),假设原本存在\(d_{u,a} \bigoplus W_{u} = f_{u,b}\),那么现在\(d_{v,a} \bigoplus W_{v} = f_{v,b}\)也同样成立 总结:对于节点\(u\),判断是否存在\(d_{u,a} \bigoplus W\)和\(f_{u,b}\)两两对应相等,时间复杂度是\(O(nlog\ n)\) 参考程序:
|
|