Spasmodic @ 2019-07-22 11:53:08
#include<bits/stdc++.h>
using namespace std;
const int N=300005;
int n,m,w[N],cx[N],ds[N*3],ans[N],tot,hd[N],d[N],f[N][20];
struct node{int u,v,lca,dis;}p[N];
struct edge{int t,nxt;}es[N<<1];
vector<int>v1[N],v2[N],v3[N];
void add(int u,int v){es[++tot]={v,hd[u]};hd[u]=tot;}
void dfs(int x){
d[x]=d[f[x][0]]+1;
for(int i=1;i<20;i++)f[x][i]=f[f[x][i-1]][i-1];
for(int i=hd[x];i;i=es[i].nxt){
int y=es[i].t;
if(y!=f[x][0])f[y][0]=x,dfs(y);
}
}
void dfs1(int u){
int prev=ds[d[u]+w[u]+N];
for(int i=hd[u],v;i;i=es[i].nxt)if((v=es[i].t)!=f[u][0])dfs1(v);
ds[d[u]+N]+=cx[u];
ans[u]+=ds[d[u]+w[u]+N]-prev;
for(int k=0;k<(int)v1[u].size();k++)--ds[d[v1[u][k]]+N];
}
void dfs2(int u){
int prev=ds[w[u]-d[u]+N];
for(int i=hd[u],v;i;i=es[i].nxt)if((v=es[i].t)!=f[u][0])dfs2(v);
for(int k=0;k<(int)v2[u].size();k++)++ds[v2[u][k]+N];
ans[u]+=ds[w[u]-d[u]+N]-prev;
for(int k=0;k<(int)v3[u].size();k++)--ds[d[v3[u][k]]+N];
}
int lca(int x,int y){
if(d[x]<d[y])swap(x,y);
for(int i=19;i>=0;i--)if(d[f[x][i]]>=d[y])x=f[x][i];
if(x==y)return x;
for(int i=19;i>=0;i--)if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i];
return f[x][0];
}
int main(){
// freopen("scheme.in","r",stdin);
// freopen("scheme.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1,u,v;i<n;i++)scanf("%d%d",&u,&v),add(u,v),add(v,u);
for(int i=1;i<=n;i++)scanf("%d",&w[i]);
dfs(1);
for(int i=1,u,v;i<=m;i++){
scanf("%d%d",&u,&v);
int LCA=lca(u,v);
p[i]=(node){u,v,LCA,d[u]+d[v]-2*d[LCA]};
cx[u]++;
v1[LCA].push_back(u);
v2[v].push_back(p[i].dis-d[p[i].v]);
v3[LCA].push_back(p[i].dis-d[p[i].v]);
}
dfs1(1),dfs2(1);
for(int i=1;i<=m;i++)if(d[p[i].u]==d[p[i].lca]+w[p[i].lca])ans[p[i].lca]--;
for(int i=1;i<=n;i++)printf("%d ",ans[i]);
puts("");
return 0;
}
by Spasmodic @ 2019-07-22 11:58:29
最好控制在10以内,n可以不等于m
by Spasmodic @ 2019-07-22 13:08:59
已AC,谢谢大家!
by 血色黄昏 @ 2021-09-07 19:35:05
@happyChristmas 所以有小数据了吗/dk,我过样例MLE15分/wq
by Spasmodic @ 2021-09-07 19:53:01
@血色黄昏 没有,当时我这里挂了
for(int k=0;k<(int)v3[u].size();k++)--ds[d[v3[u][k]]+N];
for(int k=0;k<(int)v3[u].size();k++)--ds[v3[u][k]+N];
by 血色黄昏 @ 2021-09-07 20:00:17
@happyChristmas 您写的也是vector/se/qq