编程题
### 问题描述 小 X 喜欢套娃。小 L 也喜欢套娃。 他们手里有一些套娃,正在拆拆装装。 小 X 和小 L 共有 $n$ 个套娃。每个套娃都有一个权值 $p_i$。 我们定义,一摞套娃为一个没有被其他套娃包含的套娃和其中内含的所有套娃的整体,它的权值就是这摞套娃的权值异或和。 小 X 给了你套娃现在的嵌套情况。他希望对这些套娃做任意次拆开或者放入操作,让所有摞套娃的权值和最大,同时最小化操作次数。 形式化的,我们定义一棵树的权值为其所有节点权值的异或和。我们可以做任意次操作,每次要么断掉一棵树的根节点和其所有子节点连边,要么选一些树和一个孤立节点,孤立结点作为新树根,选中的树的树根作为孤立节点的子节点。最大化最终的所有树权值和的同时,最小化操作次数。 ### 输入格式 第一行为两个整数代表 $n,m$。 接下来 $m$ 行,每行 $2$ 个整数 $u,v$ 代表套娃 $u$ 被套娃 $v$ 直接包含。 最后一行 $n$ 个整数代表 $p_i$。 ### 输出格式 两行,每行一个整数,分别代表最大权值和,和操作次数最小值。 ### 样例输入 1 ``` 3 2 1 2 1 3 3 4 5 ``` ### 样例输出 1 ``` 12 1 ``` ### 样例输入 2 ``` 4 3 1 2 2 3 3 4 1 2 4 8 ``` ### 样例输出 2 ``` 15 0 ``` ### 提示 样例解释:对于第一个样例,选择对 $1$ 做操作一,得到了 {$1$},{$2$},{$3$},权值和为 $12$,做了 $1$ 次操作。 对于第二个样例,不做任何操作即可。答案为 $15$,做了 $0$ 次操作。 | Subtask | $n$ | 分值 | | :-----: | :--------: | :---: | | 0 | $\le 10$ | 20 | | 1 | $\le 100$ | 20 | | 2 | $\le 10^3$ | 20 | | 3 | $\le 10^4$ | 20 | | 4 | $\le 10^5$ | 20 | 对于 $100$% 的数据,$1\le n\le 10^5, 0\le p_i\le 10^9$,$m