0分求助,我真的不知道为什么错了

P2015 二叉苹果树

```cpp for( int i = 1 ; i <= n ; ++i )cout << sz[i] << " "; ``` 你把debug保留干啥
by Yuina @ 2023-09-06 22:54:54


还有你代码里的 `val[i]` 不应该是第 i 条边的权值吗,你直接当成第 i 个点算了
by Yuina @ 2023-09-06 22:58:45


~~首先,谢谢大佬,~~ 改成23tps了。。。 ``` #include<bits/stdc++.h> #define ms(x,v) memset(x,v,sizeof(x)); using namespace std; const int N = 105; int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int f[N][N];//维度含义:1.当前节点i,2.砍k条边的最优解 int n, q, head[N], cnt = 1; struct Edge{ int to, nxt, w; }e[N*2]; int val[N], out[N], sz[N]; void addedge( int u , int v , int d ){ e[++cnt].to = v; e[cnt].nxt = head[u]; e[cnt].w = d; head[u] = cnt; } void dfs( int u , int fa ){ if( out[u] == 0 ){ return ; } sz[u] = out[u]; for( int i = head[u] ; i ; i = e[i].nxt ){ int v = e[i].to; if( v != fa ){ dfs(v,u); sz[u] += sz[v] + 1; } for( int j = min(sz[u],q); j >= 1 ; --j ){ for( int k = min(j-1,sz[v]) ; k >= 0 ; --k ){ f[u][j] = max(f[u][j],f[u][j-k-1] + f[v][k] + e[i].w); } } } } int main() { n = read(), q = read(); int a, b, c; for( int i = 1 ; i < n ; ++i ){ a = read(); b = read(); c = read(); addedge(a,b,c); addedge(b,a,c); out[a]++; } dfs(1,0); cout << f[1][q] << "\n"; return 0; } ``` 最后,谢谢大佬
by wangchengxi @ 2023-09-07 19:32:17


AC on #1, #5, #13~~(我也不知道为什么13能过)~~
by wangchengxi @ 2023-09-07 19:33:58


|