QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#875425 | #4815. Flower's Land | Mirasycle | Compile Error | / | / | C++14 | 2.1kb | 2025-01-29 19:01:15 | 2025-01-29 19:01:16 |
Judging History
This is the latest submission verdict.
- [2025-01-29 19:01:16]
- Judged
- Verdict: Compile Error
- Time: 0ms
- Memory: 0kb
- [2025-01-29 19:01:15]
- Submitted
answer
#include<bits/stdc++.h>
#define pb emplace_back
using namespace std;
typedef long long ll;
const int maxn=4e4+10;
void cmax(int &x,int y){ x=x>y?x:y; }
int n,k,a[maxn],sz[maxn],id[maxn],rev[maxn];
vector<int> G[maxn],f[maxn],g[maxn];
vector<vector<int> > h[2]; int ans[maxn];
void dfs(int u,int fa){//初始化 f 数组
for(auto v:G[u]){
if(v==fa) continue;
dfs(v,u); sz[u]+=sz[v];
}
sz[u]++; f[u].resize(sz[u]+1,0);
}
void F(int u,int fa){//卷积 f
sz[u]=1; f[u][1]=a[u];
for(auto v:G[u]){
if(v==fa) continue;
F(v,u); sz[u]+=sz[v];
for(int i=sz[u];i>=1;i--)//从 1 开始,因为强制选择 u
for(int j=min(sz[v],k-i);j>=1;j--)
cmax(f[u][i+j],f[u][i]+f[v][j]);
}
}
void Dp(int u,int fa){//对于每个点卷积答案,然后先卷积 h,再得到 g
if(n!=200)
int S=g[u].size();//统计答案
for(int i=max(k-S+1,1);i<=min(sz[u],k);i++)
cmax(ans[u],f[u][i]+g[u][k-i]);
int c=0; sz[0]=1; rev[0]=0;
for(auto v:G[u])
if(v!=fa) rev[++c]=v,id[v]=c;
if(!c) return ;
h[0].clear(); h[1].clear();
h[0].resize(c+1); h[1].resize(c+2);
h[1][c]=f[rev[c]]; h[0][0]=g[u]; h[1][c+1].resize(1,0);
for(int v=1;v<=c;v++){
h[0][v].resize(k+1,0);
for(int i=0;i<h[0][v-1].size();i++)
for(int j=0;j<=sz[rev[v]]&&i+j<=k;j++)
cmax(h[0][v][i+j],h[0][v-1][i]+f[rev[v]][j]);
}
for(int v=c-1;v>=1;v--){
h[1][v].resize(k+1,0);
for(int i=0;i<h[1][v+1].size();i++)
for(int j=0;j<=sz[rev[v]]&&i+j<=k;j++)
cmax(h[1][v][i+j],h[1][v+1][i]+f[rev[v]][j]);
}
for(int i=1;i<=c;i++){//卷积 g
int v=rev[i],z=min(k,n-sz[v]);
g[v].resize(z+1,0);
for(int p=0;p<h[0][i-1].size();p++)
for(int q=0;q<h[1][i+1].size()&&p+q+1<=z;q++){
cmax(g[v][p+q+1],a[u]+h[0][i-1][p]+h[1][i+1][q]);
}
}
}
for(auto v:G[u])
if(v!=fa) Dp(v,u);
}
int main(){
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n-1;i++){
int u,v; cin>>u>>v;
G[u].pb(v); G[v].pb(u);
}
dfs(1,0); F(1,0); g[1].pb(0); Dp(1,0);
for(int i=1;i<=n;i++) cout<<ans[i]<<" ";
return 0;
}
詳細信息
answer.code: In function ‘void Dp(int, int)’: answer.code:30:25: error: ‘S’ was not declared in this scope 30 | for(int i=max(k-S+1,1);i<=min(sz[u],k);i++) | ^ answer.code: At global scope: answer.code:60:9: error: expected unqualified-id before ‘for’ 60 | for(auto v:G[u]) | ^~~ answer.code:62:1: error: expected declaration before ‘}’ token 62 | } | ^