问题:
难度:省选/NOI-
说明:
输入一个N代表节点数,输入一个二维数组 int[][] 代表各个节点的连接情况,int[i]有两个元素,代表两个节点相连的意思。
然后,可以剪掉节点之间任意数的连接,剪了之后,将剩余的连通块(节点之间相连的块)相乘,要求得出相乘得数最大。
输入范围:
输入数组int[][] arr,arr.length = N - 1;
对于 10\%10% 的数据,保证 n \leq 5n≤5。
对于 30\%30% 的数据,保证 n \leq 100n≤100。
另有 30\%30% 的数据,保证给出的树是一条链。
对于 100\%100% 的数据,保证 1 \leq n \leq 7001≤n≤700,1 \leq u, v \leq n1≤u,v≤n。
输入样例:
// 总结点5个,然后输入int[][]{
{1,2},{2,3},{3,4},{4,5}},剪掉{2,3}或{3,4}得到最大乘积
// 1 - 2 - 3 - 4 -5
5
1 2
2 3
3 4
4 5
结果:6
// 总节点8, 然后连接情况是这样鬼样,剪掉{3,6},{1,2},得到乘积18
// | - - - - - |
// | - - - | | | - - - |
// | | | | |
// 1 - 2 3 4 5 6 7 8
// | | | |
// | - - - | | |
// | - - - - - | |