题目链接:https://codeforces.com/contest/23/problem/E
#include <iostream>
#include <vector>
using namespace std;
static const int MAXN=700+10;
vector<int> mul(vector<int> &A, int b)
{
vector<int> C;
for (int i = 0, t = 0; i < A.size() || t; i++)
{
if (i < A.size()) t += A[i] * b;
C.push_back(t % 10);
t /= 10;
}
return C;
}
vector<int> mutiply(vector<int> &a, vector<int> &b)
{
vector<int> c;
unsigned cIdx = 0;
int t = 0;
for (cIdx = 0; cIdx < a.size() + b.size(); cIdx++)
{
for (unsigned aIdx = 0; aIdx < a.size() && aIdx <= cIdx; aIdx++)
{
unsigned bIdx = cIdx - aIdx;
if (bIdx < b.size()) t += a[aIdx] * b[bIdx];
}
c.push_back(t % 10); t /= 10;
}
while (t) { c.push_back(t % 10); t /= 10; }
while (c.size() > 1 && c.back() == 0)
c.pop_back();
return c;
}
vector<int> max_vec(vector<int> a,vector<int> b)
{
if(a.size()>b.size()) return a;
if(a.size()<b.size()) return b;
if(vector<int>(a.rbegin(),a.rend())>vector<int>(b.rbegin(),b.rend())) return a;
return b;
}
vector<int> g[MAXN];
int siz[MAXN];
vector<int> dp[MAXN][MAXN];
int n;
void dfs(int u,int fa)
{
siz[u]=1;
for(int i=0;i<=n;i++) dp[u][i]={1};
for(int i=0;i<g[u].size();i++)
{
int v=g[u][i];
if(v==fa) continue;
dfs(v,u);
for(int j=siz[u];j>=0;j--)
for(int k=siz[v];k>=0;k--) dp[u][j+k]=max_vec(dp[u][j+k],mutiply(dp[u][j],dp[v][k]));
siz[u]+=siz[v];
}
for(int i=1;i<=siz[u];i++) dp[u][0]=max_vec(dp[u][0],mul(dp[u][i],i));
}
int main()
{
scanf("%d",&n);
for(int i=1;i<n;i++)
{
int u,v;
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
dfs(1,-1);
for(int i=dp[1][0].size()-1;i>=0;i--) printf("%d",dp[1][0][i]);
printf("\n");
return 0;
}