在一片古老的遗迹中,探险者发现了一座由 nn 个宝藏节点(编号从 11 到 nn)组成的迷宫,节点之间通过 mm 条神秘通道(无向边)相连,形成一个连通的无向图。每个节点 ii 藏有一件宝物,价值为非负整数 aiai。探险者可以从任意节点开始探险,沿着通道移动到相邻节点,收集经过节点的宝物价值。然而,迷宫的魔法规则限制了移动:探险者不能连续两次通过同一条通道(即,如果通过某条通道从节点 vjvj 到达 vj+1vj+1,下一步不能通过同一条通道返回 vjvj)。探险者可以多次访问同一节点或通道(只要满足移动限制)。你的任务是规划一条路径,最大化探险者收集到的不同节点的宝物价值之和。请你求出这个最大的宝物价值之和。
为了防止输入过大带来的常数问题,C++ 选手请尽量使用关闭流同步的 std::cin 和 std::cout 实现输入输出,否则可能出现因读入输出问题导致的 TLE 等。
int main(){ std::ios::sync_with_stdio(0); std::cin.tie(0); // your code return 0; }
第一行一个整数 TT (1≤T≤5×106)(1≤T≤5×106),表示测试数据组数。
第一行两个整数 nn 和 mm (1≤n≤2×105,n−1≤m≤2×105)(1≤n≤2×105,n−1≤m≤2×105),分别表示顶点数和边数。
第二行 nn 个非负整数 a1,a2,…,ana1,a2,…,an (0≤ai≤109)(0≤ai≤109),表示每个节点的宝物价值。
接下来 mm 行,每行两个整数 u,vu,v (1≤u,v≤n,u≠v)(1≤u,v≤n,u=v),表示一条无向边 (u,v)(u,v)。保证图连通,不存在重边和自环。
保证所有测试数据的 nn 之和和 mm 之和均不超过 5×1065×106。
2
4 4
10 20 30 40
1 2
2 3
3 4
4 1
3 2
5 10 15
1 2
2 3
100
30