CF1508C
你总不能一下午啥事情都没干吧。
题面
作为一名教师,Riko Hakozaki 经常需要帮助她的学生解决各类学科的问题。今天,她被问到了一个编程任务,内容如下:
给定一个无向完全图,包含 \(n\) 个节点,其中部分边已经被赋予了正权值,其余边尚未赋值。你需要为所有未赋值的边分配非负权值,使得最终所有边都被赋值后的完全图中,所有边权的异或和等于 \(0\)。
定义一个完全赋值的完全图的“丑陋度”为其最小生成树的权值,即最小生成树所有边权之和。你需要合理分配权值,使得最终图的丑陋度尽可能小。
提示:一个无向完全图有 \(n\) 个节点,包含所有 \(1 \le u < v \le n\) 的边;这样的图共有 \(\frac{n(n-1)}{2}\) 条边。
她不确定如何解决这个问题,因此请你帮她解决。
sol
又是分讨题。
设原来边权的异或值为 \(S\)。
发现如果我们想要让这个最小生成树尽量小的话,有一个简单的做法是只定一条边为 \(S\),剩下全填 \(0\),感性理解一下会发现这个是对的。
在未赋值的边联通且有环的情况下答案一定为 \(0\)。
接下来就有两种情况需要讨论了:
补图刚好是一棵树。
这种情况点数不会太多,暴力枚举哪条边改为 \(S\) 跑最小生成树就行了。
直接做就是 \(O(n^3\log n^2)\) 的。
补图不连通
这个时候也得分两种情况,看有没有环。
有环我直接把补图连通块跑出来搞最小生成树就行了,那个边权为 \(S\) 的边随便找个环放了就好了。
没环的时候也可以说明点数不会太多,也是枚举哪条边放就完事了,也是 \(O(n^3\log n^2)\)。
代码还没写,但是这个能难写到哪去???