Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
23898 M0yunAllgor1thm 【BJ】T1 C++ 运行超时 70 1000 MS 856 KB 1414 2023-12-03 20:49:34

Tests(14/20):


#include <bits/stdc++.h> #define LL long long #define PII pair<int,int> using namespace std; const int MAXN=5005; LL dp[5005][4];//0-m,1-w&down/w&indis,2-w&!down,3-no int N,Q,K,L; vector<int>gra[MAXN]; int m[MAXN],w[MAXN]; void dpfs(int u,int fa,int dis) { dp[u][0]=m[u]; if(dis<=L) dp[u][1]=w[u]; else dp[u][2]=w[u]; dp[u][3]=0; for(int v:gra[u]) { if(v==fa) continue; dpfs(v,u,dis+1); dp[u][0]+=max(max(dp[v][0],dp[v][1]),dp[v][3]); dp[u][1]=max(dp[u][1]+max(max(dp[v][0],dp[v][1]),dp[v][3]),dp[u][2]+dp[v][3]); if(dis>L) dp[u][2]+=max(dp[v][0],dp[v][1]); dp[u][3]+=max(max(dp[v][0],dp[v][1]),max(dp[v][2],dp[v][3])); } return; } int main() { // freopen("tree.in","r",stdin); // freopen("tree.out","w",stdout); scanf("%d %d",&N,&Q); for(int i=1;i<=N;i++) scanf("%d",&m[i]); for(int i=1;i<=N;i++) scanf("%d",&w[i]); scanf("%d",&K); for(int i=1;i<N;i++) { int u,v; scanf("%d %d",&u,&v); gra[u].push_back(v); gra[v].push_back(u); } while(Q--) { scanf("%d",&L); for(int i=1;i<=N;i++) for(int j=0;j<4;j++) dp[i][j]=-1e17; dpfs(K,0,0); printf("%lld\n",max(max(dp[K][0],dp[K][1]),dp[K][3])); } fclose(stdin); fclose(stdout); return 0; }


测评信息: