悬赏关注,MnZn学淀粉质10^-114514秒求助只过#8其他万紫千红

P3806 【模板】点分治 1

lzyqwq @ 2023-02-22 10:18:52

#include<bits/stdc++.h>
#define N 10005
using namespace std;
int n,m,q[105],sz[N],sum,rt,mx[N],d[N],cnt,dd[N];
vector<pair<int,int>>g[N];
queue<int>p;
bool ok[10000005],del[N],ans[105];
void gravity(int u,int fa){
    sz[u]=1;
    mx[u]=0;
    for(auto[v,w]:g[u]){
        if((v^fa)&&!del[v]){
            gravity(v,u);
            mx[u]=max(mx[u],sz[v]);
            sz[u]+=sz[v];
        }
    }
    mx[u]=max(mx[u],sum-sz[u]);
    if(mx[u]<mx[rt]){
        rt=u;
    }
}
void dis(int u,int fa){
    dd[++cnt]=d[u];
    for(auto[v,w]:g[u]){
        if((v^fa)&&!del[v]){
            d[v]=d[u]+w;
            dis(v,u);
        }
    }
}
void treedivide(int u,int fa){
    ok[0]=del[u]=1;
    p.push(0);
    for(auto[v,w]:g[u]){
        if((v^fa)&&!del[v]){
            d[v]=w;
            dis(v,u);
            for(int i=1;i<=cnt;++i){
                for(int j=1;j<=m;++j){
                    if(q[j]>=dd[i]){
                        ans[j]|=ok[q[j]-dd[i]];
                    }
                }
            }
            for(int i=1;i<=cnt;++i){
                if(dd[i]<=1e7){
                    p.push(dd[i]);
                    ok[dd[i]]=1;
                }
            }
            cnt=0;
        }
    }
    while(p.size()){
        ok[dd[p.front()]]=0;
        p.pop();
    }
    for(auto[v,w]:g[u]){
        if((v^fa)&&!del[v]){
            sum=sz[v];
            mx[rt=0]=1e9;
            gravity(v,u);
            treedivide(rt,0);
        }
    }
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1,u,v,w;i<n;++i){
        scanf("%d%d%d",&u,&v,&w);
        g[u].emplace_back(v,w);
        g[v].emplace_back(u,w);
    }
    sum=n;
    mx[0]=1e9;
    gravity(1,0);
    for(int i=1;i<=m;++i){
        scanf("%d",&q[i]);
    }
    treedivide(rt,0);
    for(int i=1;i<=m;++i){
        if(ans[i]){
            puts("AYE");
        }else{
            puts("NAY");
        }
    }
}

by fresh_boy @ 2023-02-22 10:33:22

洛谷标题界逆流而上的一股清流


by 5k_sync_closer @ 2023-02-22 10:37:28

@蒟蒻·廖子阳 55~58 行改成

    while(p.size()){
        ok[p.front()]=0;
        p.pop();
    }

另外,unordered_set 好写喵,为什么贺 oi wiki 喵


by lzyqwq @ 2023-02-22 18:37:20

@5k_sync_closer 我没有贺喵 我是看的NC视频 然后今天信息课上对着oiwiki和第二篇题解打了一遍喵


by lzyqwq @ 2023-02-22 18:42:32

@5k_sync_closer 但据说unordered_map会被卡成O(n)


by 5k_sync_closer @ 2023-02-22 18:45:59

@蒟蒻·廖子阳 是 unordered_set,而且卡了就随机扰动不就行了


by lzyqwq @ 2023-02-22 18:47:33

@5k_sync_closer 草我眼瞎


by lzyqwq @ 2023-02-22 18:47:57

@ice_in_sky 其实我是btd


|