最小连通代价
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

Bingbong有 n 个结点,第 i 个结点的权值为 A_i

初始时都为孤立的点,互不连通。

现在需要加若干条无向边,使得所有点构成一张无向连通图。

我们定义在两个结点之间加边的代价为:如果两个点的权值都是偶数或者都是奇数,代价为 a。否则为 b

现在你需要帮助Bingbong算出所有点构成一张无向连通图的最小代价之和。

注:加边过程中不能有重边和自环。

输入描述:

第一行一个整数 T(1\leq T\leq 1000) ,表示输入的数据组数。

对于每组数据的格式为:

第一行三个整数 n(1\leq n\leq 2\times 10^5),a,b(-100\leq a,b\leq 100),表示结点个数和连通结点的不同代价。

第二行 n 个整数,第 i 个数 A_i(0\leq A_i\leq 10^6)表示第 i 个结点的权值。

对于单组数据保证 \sum n\leq 2\times 10^5

输出描述:

T 行,每行 一个整数,表示所有点构成一张无向连通图的最小代价之和。
示例1

输入

复制
2
5 1 2
0 1 2 3 4
5 100 0
1 2 3 4 5

输出

复制
5
0

说明

对于第二组样例加边后的连通图为: