建议增加一组Hack数据:

P1122 最大子树和

这个代码可以过 ```cpp #include<bits/stdc++.h> #define mx 16002 int head[mx],dp[mx],a[mx]; int n,m,cnt,k=-2147483647; std::vector<int> ed[mx]; void dfs(int nr,int nf) { dp[nr]=a[nr]; for(int i=0;i<ed[nr].size();i++) { int to=ed[nr][i]; if(to==nf)continue; dfs(to,nr); if(dp[to]>0)dp[nr]+=dp[to]; } } int main() { int i,x,y; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); for(i=1;i<n;i++) { scanf("%d%d",&x,&y); ed[x].push_back(y); ed[y].push_back(x); } dfs(1,-1); for(i=1;i<=n;i++) if(dp[i]>k)k=dp[i]; printf("%d",k); return 0; } ```
by RNTBW @ 2022-03-27 21:48:50


@[lice1211](/user/157052) 确实啊,设置的测试点都是单向的,按照题目意思是双向才对,估计是洛谷官方搞错了,我的代码就是双向的,输出就是2002,之前写了一个单向的测试数据反过来输出就不对。
by JimbaPapagei @ 2022-04-10 17:25:27


应该是已经加强了,单向建边WA 10pts: ```cpp #include <bits/stdc++.h> using namespace std; const int MAXN = 2e4; const int INF = 0x3f3f3f3f; int n, a[MAXN], head[MAXN << 1], nxt[MAXN << 1], to[MAXN << 1], f[MAXN], tot; inline void link(int u, int v) { to[tot] = v; nxt[tot] = head[u]; head[u] = tot++; } void dfs(int p, int r) { f[p] = a[p]; for (int i = head[p]; ~i; i = nxt[i]) if (to[i] != r) { dfs(to[i], p); if (f[to[i]] > 0) f[p] += f[to[i]]; } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; memset(head, -1, sizeof(head)); int u, v; for (int i = 1; i < n; i++) { cin >> u >> v; link(u, v); //这里加上link(v,u)能AC } dfs(1, 0); int ans = -INF; for (int i = 1; i <= n; i++) ans = max(ans, f[i]); cout << ans; return 0; } ```
by creation_hy @ 2022-09-15 13:12:14


@[creation_hy](/user/576378) az好像并没有。。。我的[单向边](https://www.luogu.com.cn/record/122135265)刚过了
by lxyt_415x @ 2023-08-21 21:19:30


|