请求加强数据

P4178 Tree

错误代码: ```cpp #include<bits/stdc++.h> #define i64 long long int using namespace std; int read() { int n=0,k=1; char ch=getchar(); while(ch>'9'||ch<'0') { if(ch=='-') { k=-1; } ch=getchar(); } while(ch>='0'&&ch<='9') { n=n*10+ch-'0'; ch=getchar(); } return n*k; } struct edge { int to,dis,next; }E[80001]; int head[40001]; int Ecnt=0; void addedge(int from,int to,int dis) { Ecnt++; E[Ecnt].dis=dis; E[Ecnt].to=to; E[Ecnt].next=head[from]; head[from]=Ecnt; } int tot; int K; int n; int root; int siz[40001]; int f[40001]; bool vis[40001]; void getroot(int u,int fa) { f[u]=0; siz[u]=1; for(int r=head[u];r;r=E[r].next) { int v=E[r].to; if(vis[v]||v==fa) { continue; } getroot(v,u); f[u]=max(f[u],siz[v]); siz[u]+=siz[v]; } f[u]=max(f[u],tot-siz[u]); if(f[u]<f[root]) { root=u; } } int Cnt; int Dis[40001]; void getdis(int u,int fa,int dist) { Cnt++; Dis[Cnt]=dist; for(int r=head[u];r;r=E[r].next) { int v=E[r].to; if(v==fa||vis[v]) { continue; } getdis(v,u,dist+E[r].dis); } } int ans=0; int getans(int u,int dist) { Cnt=0; getdis(u,0,dist); sort(Dis+1,Dis+Cnt+1); int L=1,R=Cnt,ans=0; while(L<=R) { if(Dis[L]+Dis[R]<=K) { ans+=(R-L); L++; } else { R--; } } return ans; } void div(int u) { ans+=getans(u,0); vis[u]=1; for(int r=head[u];r;r=E[r].next) { int v=E[r].to; if(vis[v]) { continue; } ans-=getans(v,E[r].dis); f[0]=998244353; root=0; //tot=siz[v];此处没有赋初值 getroot(v,0); div(root); } } int main() { freopen("test.out","r",stdin); int u,v,w; n=read(); for(int r=1;r<n;r++) { u=read(); v=read(); w=read(); addedge(u,v,w); addedge(v,u,w); } K=read(); f[0]=998244353; tot=n; getroot(1,0); div(root); cout<<ans; return 0; } /* */ ```
by _Remake_ @ 2022-07-17 11:18:03


补个输出 output: ``` 9499500 ```
by _Remake_ @ 2022-07-17 12:54:25


@[小粉兔](/user/10703)
by OldDriverTree @ 2023-07-12 12:30:30


|