QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#564870#4811. Be CarefulHarry27182Compile Error//C++143.2kb2024-09-15 16:09:382024-09-15 16:09:40

Judging History

你现在查看的是最新测评结果

  • [2024-09-15 16:09:40]
  • 评测
  • [2024-09-15 16:09:38]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
vector<int>e[205],e1[205],e2[205];
int f[100005],g[100005][205],tmp[100005][205],tmp2[100005][205],tmp3[100005];
int dp[205][205],n,suf[205][205],C[205][205],pw[205][205],u,v;
const int mod=998244353;
void Add(int &x,int y){x=(x+y>=mod?x+y-mod:x+y);}
void dfs(int u,int fa)
{
	if(e[u].size()==1&&fa)return;
	int num=0,B=0,mn=0x3f3f3f3f,mx=0;vector<int>vec;
	for(int i=0;i<e[u].size();i++)
	{
		int v=e[u][i];
		if(v==fa)continue;
		dfs(v,u);
		if(e[v].size()==1)num++;
		else vec.emplace_back(e[v].size()),mx=max(mx,(int)e[v].size());
	}
	sort(vec.begin(),vec.end());
	for(int i=0;i<=vec.size();i++)
	{
		if((i==0?0:vec[i-1])+vec.size()-i+(i>10)<=mn)
		{
			mn=(i==0?0:vec[i-1])+vec.size()-i;
			B=(i==0?0:vec[i-1]);
		}
	}
	for(int i=0;i<e[u].size();i++)
	{
		int v=e[u][i];
		if(v==fa)continue;
		if(e[v].size()==1);
		else if(e[v].size()<=B)e1[u].emplace_back(v);
		else e2[u].emplace_back(v);
	}
	assert((1<<B)<=100000&&(1<<e2[u].size())<=100000)
	for(int i=0;i<(1<<B);i++)f[i]=0;
	f[0]=1;
	for(int i=0;i<e1[u].size();i++)
	{
		int v=e1[u][i];
		for(int s=0;s<(1<<B);s++)tmp3[s]=f[s],f[s]=0;
		for(int s=0;s<(1<<B);s++)
		{
			if(!tmp[s])continue;
			for(int j=0;j<B;j++)Add(f[s|(1<<j)],1ll*tmp3[s]*dp[v][j]%mod);
		}
	}
	for(int t=0;t<(1<<B);t++)
	{
		if(!f[t])continue;
		for(int s=0;s<(1<<e2[u].size());s++)for(int j=0;j<=num;j++)g[s][j]=0;
		g[0][0]=1;
		for(int i=0;i<=n;i++)
		{
			for(int s=0;s<(1<<e2[u].size());s++)
			{
				for(int j=0;j<=num;j++)
				{
					if(!g[s][j])continue;
					if(i<B&&((t>>i)&1))continue;
					int now=1ll*f[t]*g[s][j]%mod;
					for(int j=0;j<e2[u].size();j++)if(!((s>>j)&1))now=1ll*now*suf[e2[u][j]][i+1]%mod;
					Add(dp[u][i],1ll*now*pw[n-i][num-j]%mod);
				}
			}
			for(int s=0;s<(1<<e2[u].size());s++)
			{
				for(int j=0;j<=num;j++)tmp[s][j]=g[s][j];
			}
			for(int j=0;j<e2[u].size();j++)
			{
				for(int s=0;s<(1<<e2[u].size());s++)
				{
					if((s>>j)&1)continue;
					for(int k=0;k<=num;k++)
					{
						if(!g[s][k])continue;
						Add(g[s|(1<<j)][k],1ll*g[s][k]*dp[e2[u][j]][i]%mod);
					}
				}
			}
			for(int s=0;s<(1<<e2[u].size());s++)
			{
				for(int j=0;j<=num;j++)tmp2[s][j]=g[s][j],g[s][j]=0;
				for(int j=0;j<=num;j++)
				{
					if(!tmp2[s][j])continue;
					for(int k=j;k<=num;k++)Add(g[s][k],1ll*tmp2[s][j]*C[num-j][k-j]%mod);
				}
			}
			if(!((t>>i)&1))
			{
				for(int s=0;s<(1<<e2[u].size());s++)
				{
					for(int j=0;j<=num;j++)Add(g[s][j],mod-tmp[s][j]);
				}
			}
		}
	}
	for(int i=n;i>=0;i--)
	{
		suf[u][i]=suf[u][i+1];
		Add(suf[u][i],dp[u][i]);
	}
	//for(int i=0;i<=n;i++)cout<<u<<' '<<i<<' '<<dp[u][i]<<'\n';
}
int main()
{
	//freopen("mex.in","r",stdin);
	//freopen("mex.out","w",stdout);
	cin.tie(0)->sync_with_stdio(0);
	cin>>n;
	for(int i=1;i<n;i++)cin>>u>>v,e[u].emplace_back(v),e[v].emplace_back(u);
	for(int i=0;i<=n;i++)
	{
		pw[i][0]=1;
		for(int j=1;j<=n;j++)pw[i][j]=1ll*pw[i][j-1]*i%mod;
	}
	C[0][0]=1;
	for(int i=1;i<=n;i++)
	{
		C[i][0]=1;
		for(int j=1;j<=i;j++)C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;
	}
	dfs(1,0); 
	for(int i=0;i<=n;i++)cout<<dp[1][i]<<'\n';
	return 0;
}

Details

answer.code: In function ‘void dfs(int, int)’:
answer.code:38:9: error: expected ‘;’ before ‘for’
   38 |         for(int i=0;i<(1<<B);i++)f[i]=0;
      |         ^~~
answer.code:38:21: error: ‘i’ was not declared in this scope
   38 |         for(int i=0;i<(1<<B);i++)f[i]=0;
      |                     ^