- 天天爱跑步
- 2017-03-05 20:19:01 @
代码如下
#include<cstdio>
const int N=300005;
int n,m,s,t,ed,ED,w[N],c[N],g[N],G[2][2][N],v[N<<1],V[N<<2],NXT[N<<2],nxt[N<<1],sz[N],f[N],son[N],d[N],top[N],sum[2][N<<1];
void read(int &x){
char c;
while((c=getchar())<'0' || c>'9');
x=c-'0';
while((c=getchar())>='0' && c<='9') x=x*10+c-'0';
}
void add(int x,int y){
v[++ed]=y;
nxt[ed]=g[x];
g[x]=ed;
}
void ADD(int &x,int y){
V[++ED]=y;
NXT[ED]=x;
x=ED;
}
void dfs(int x){
sz[x]=1;
for(int i=g[x];i;i=nxt[i]) if(v[i]!=f[x]){
f[v[i]]=x;d[v[i]]=d[x]+1;
dfs(v[i]);
sz[x]+=sz[v[i]];
if(sz[v[i]]>sz[son[x]]) son[x]=v[i];
}
}
void dfs2(int x,int y){
top[x]=y;
if(son[x]) dfs2(son[x],y);
for(int i=g[x];i;i=nxt[i]) if(v[i]!=f[x] && v[i]!=son[x]) dfs2(v[i],v[i]);
}
void dfs3(int x){
c[x]-=sum[0][w[x]+d[x]]+sum[1][w[x]-d[x]+N];
for(int i=g[x];i;i=nxt[i]) if(v[i]!=f[x]) dfs3(v[i]);
for(int i=G[0][0][x];i;i=NXT[i]) sum[0][V[i]]++;
for(int i=G[0][1][x];i;i=NXT[i]) sum[0][V[i]]--;
for(int i=G[1][0][x];i;i=NXT[i]) sum[1][V[i]+N]++;
for(int i=G[1][1][x];i;i=NXT[i]) sum[1][V[i]+N]--;
c[x]+=sum[0][w[x]+d[x]]+sum[1][w[x]-d[x]+N];
}
int lca(int x,int y){
for(;top[x]!=top[y];x=f[top[x]]) if(d[top[x]]<d[top[y]]){int z=x;x=y;y=z;}
return d[x]<d[y]?x:y;
}
int main(){
read(n),read(m);
for(int i=1;i<n;i++){
read(s),read(t);
add(s,t),add(t,s);
}
dfs(1),dfs2(1,1);
for(int i=1;i<=n;i++) read(w[i]);
while(m--){
read(s),read(t);
int fa=lca(s,t);
ADD(G[0][0][s],d[s]),ADD(G[0][1][f[fa]],d[s]);
ADD(G[1][0][t],d[s]-2*d[fa]),ADD(G[1][1][fa],d[s]-2*d[fa]);
}
dfs3(1);
for(int i=1;i<n;i++) printf("%d ",c[i]);
printf("%d",c[n]);
return 0;
}
我真的努力加代码区块……但就是不行啊…………
1 条评论
-
q234rty LV 10 @ 2017-03-05 20:47:40
试试在"代码如下"后加一个空行?
Vijos评测时的栈空间为1MB,不同于UOJ的8MB,可能导致RE。
下面是一个扩大栈空间的黑科技:
在程序的开头添加extern int main2(void) __asm__ ("_main2");
在程序的结尾添加int main() { int size = 8 << 20; // 8Mb char *p = (char *)malloc(size) + size; __asm__ __volatile__( "movl %0, %%esp\n" "pushl $_exit\n" "jmp _main2\n" :: "r"(p)); }
并将原来的main函数更名为main2
- 1
信息
- ID
- 2004
- 难度
- 8
- 分类
- (无)
- 标签
- 递交数
- 1681
- 已通过
- 154
- 通过率
- 9%
- 被复制
- 16
- 上传者