本页面数据量不需要BigInt也可dfs
2025-09-17 13:00:01
发布于:湖北
9阅读
0回复
0点赞
const int MAXN = 705;
vector<vector<int>> tree;
int n;
long long dp[MAXN][MAXN];
int size[MAXN];
void dfs(int u, int parent) {
size[u] = 1;
dp[u][1] = 1;
for (int v : tree[u]) {
if (v == parent) continue;
dfs(v, u);
long long temp[MAXN] = {0};
for (int i = size[u]; i >= 1; i--) {
for (int j = size[v]; j >= 1; j--) {
// 断开边
temp[i] = max(temp[i], dp[u][i] * dp[v][j] * j);
// 不断开边
temp[i + j] = max(temp[i + j], dp[u][i] * dp[v][j]);
}
}
size[u] += size[v];
for (int i = 1; i <= size[u]; i++) {
dp[u][i] = temp[i];
}
}
}
int main() {
cin >> n;
tree.resize(n + 1);
for (int i = 0; i < n - 1; i++) {
int u, v;
cin >> u >> v;
tree[u].push_back(v);
tree[v].push_back(u);
}
memset(dp, 0, sizeof(dp));
dfs(1, -1);
long long ans = 0;
for (int i = 1; i <= n; i++) {
ans = max(ans, dp[1][i] * i); // 根节点所在的连通块大小为 i,还需要乘以 i
}
cout << ans << endl;
return 0;
}
这里空空如也


有帮助,赞一个