TLE#1 90pts求调1关 已过讨论区HACK
  • 板块P4178 Tree
  • 楼主ivyjiao
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/9 10:54
  • 上次更新2024/8/9 11:37:15
查看原帖
TLE#1 90pts求调1关 已过讨论区HACK
578029
ivyjiao楼主2024/8/9 10:54

码风良好,照着板子微修。

#include<bits/stdc++.h>
#define PII pair<int,int>
#define fi first
#define se second
using namespace std;
int n,m,u,v,w,maxp[40001],sz[40001],dis[40001],rem[40001],q[40001],que[40001],pd[20001],jud[10000001],sum,dfn,root,ans;
bool vis[40001];
vector<PII>G[40001];
void getroot(int u,int fa){
    sz[u]=1;
    maxp[u]=0;
    for(int i=0;i<G[u].size();i++){
        int v=G[u][i].se;
        if(v==fa||vis[v]) continue;
        getroot(v,u);
        sz[u]+=sz[v];
        maxp[u]=max(maxp[u],sz[v]);
    }
    maxp[u]=max(maxp[u],sum-sz[u]);
    if(maxp[u]<maxp[root]) root=u;
}
void getdis(int u,int fa){
    rem[++dfn]=dis[u];
    for(int i=0;i<G[u].size();i++){
        int v=G[u][i].se;
        if(v==fa||vis[v]) continue;
        dis[v]=dis[u]+G[u][i].fi;
        getdis(v,u);
    }
}
void calc(int u){
    int p=0;
    for(int i=0;i<G[u].size();i++){
        int v=G[u][i].se;
        if(vis[v]) continue;
        dfn=0;
        dis[v]=G[u][i].fi;
        getdis(v,u);
        for(int j=1;j<=dfn;j++){
            for(int k=0;k<=m;k++){
                if(que[k]>=rem[j]) pd[k]+=jud[que[k]-rem[j]];
            }
        }
        for(int j=1;j<=dfn;j++){
            q[++p]=rem[j];
            jud[rem[j]]++;
        }
    }
    for(int i=1;i<=p;i++) jud[q[i]]=0;
}
void solve(int u){
    vis[u]=1;
    jud[0]=1;
    calc(u);
    for(int i=0;i<G[u].size();i++){
        int v=G[u][i].se;
        if(vis[v]) continue;
        sum=sz[v];
        root=0;
        maxp[0]=n;
        getroot(v,0);
        solve(root);
    }
}
int main(){
    cin>>n;
    for(int i=1;i<n;i++){
        cin>>u>>v>>w;
        G[u].push_back({w,v});
        G[v].push_back({w,u});
    }
    cin>>m;
    for(int i=0;i<=m;i++) que[i]=i;
    maxp[0]=n;
    sum=n;
    getroot(1,0);
    solve(root);
    int ans=0;
    for(int i=0;i<=m;i++) ans+=pd[i];
    cout<<ans;
}
2024/8/9 10:54
加载中...