代码源2026 CSP-S 模拟赛 Day 18 #C. 城市
子任务1 2的\(15\)分当然可以\(O(n^2log)\)做克鲁斯卡尔
子任务5的\(15\)分,可以用线性基优化,具体来说:
最开始线性基里一条边也没有,整个图也一条边也没有,互不联通
假如w1=1,这条边是最小的(因为\(w_i\geq 1\)),所以把1放进线性基里,图里添加若干条i<--> i^1 的边。
假如w2=1,这条边也很小,把2放进线性基里,图里添加若干条i<-->i2的边。这样判定xy是否连通,只需要判定xy是否能够用线性基里的1 2 异或得到。
假如w3=3,这条边也很小,但是没有必要管他,因为线性基里已经有了1,2,这说明全体i<-->i1和i<-->i2已经连通,所以全体i<-->i^3也已经连通。
这需要我们小心地对每个w=1,w=2,w=3各维护一个线性基。举例来说,n=6的时候(节点编号012345),w2=1虽然很妙,但是对于5号节点来说没啥作用,因为5号节点想要用上需要和7号节点相连,但是7号节点现在不在。你可能需要等待w1=2或者w4=3这种更长的边,来使得4<-->5或者1<-->5。
子任务3
现在回头看子任务3,可以发现子任务3没有这种需求,不需要对每种w各维护一个线性基。所以一个线性基即可解决问题。
我去,怎么顺手把子任务5也给过了。应该是数据弱了,比如:
1
5
1 5 3 5 1 1 4 1
对于这个样例,w[4],w[5],w[7]一起把线性基占满了,而只连通了0 4,1 4,3 4这三条边,无法使得联通。
子任务4
把子任务5的\(w=1\sim 5\)的代码拿出来,vector
拼好分
把这个map<int,vector
100分
考虑把

浙公网安备 33010602011771号