CF1292C Xenon's Attack on the Gangs
题目链接: https://codeforces.com/problemset/problem/1292/C 题意 在一颗有n个节点的树上,给每个边赋值,所有的值都在 \([0,n-2]\) 内并且不重复,也就是一条边一个权值,令 \(mex(u,v)\) 表示从 \(u到v\) 这条简单路径上没有出现过的最小自然数,要求使所有路径的 \(mex\) 之和最大。 分析 最开始我一看这个题,统计答案的时候好像就需要 \(O(N^2)\) ,那这个题好像统计个答案就可能会T?当我看见时限是 \(3s\) 的时候我就知道我想多了,分析时间复杂度的时候提前看一下时限,防止因看错时限分析错时间复杂度。 首先这个边的权值肯定有规律,不然枚举权值时间复杂度会很高,最开始我想的是从每个边开始 \(dfs\) 一下把经过次数最多的边设成0,然后依次类推,每次 \(dfs\) 不访问重复经过的点,发现存在一个什么问题呢,就是从不同的点开始 \(dfs\) 造成的结果不一样,所以这样不可行,不妨先画一条链来看看。 如果已经放好了 \(0~x-1\) ,考虑 \(x\) 放哪个位置,如果我把 \(x\) 放到 \(5-v\) 上,那么 \(mex(u,5)\) 就会是 \(x\) ,然后只有 \(mex(u,v)\) 会等于 \(x+1\) ,但要是把 \(x\) 放到 \(u-1\) 或 \(4-5\)