【BZOJ3631】[JLOI2014]松鼠的新家

来源:互联网 发布:广州淘宝村在哪里 编辑:程序博客网 时间:2024/04/26 06:08

题目大意:从编号1到n遍历图(中间经过点不算遍历过),求每个点经过了几次

树剖,每次i到i+1都相当于一次链上修改,最后单点查询就行。

#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>#define N 300009#define inf 0x7fffff#define ll long longusing namespace std;int n,number=0,cnt=0,first[N],father[N],top[N],dfn[N],size[N],Mson[N],now[N*4],deep[N],a[N];struct edge{int to,next;void add(int x,int y){to=y,next=first[x],first[x]=number;}}e[2*N];void dfs1(int x){size[x]=1;deep[x]=deep[father[x]]+1;for (int i=first[x];i;i=e[i].next)if (father[x]!=e[i].to){father[e[i].to]=x;dfs1(e[i].to);size[x]+=size[e[i].to];if (size[e[i].to]>size[Mson[x]])Mson[x]=e[i].to;}}void dfs2(int x,int y){top[x]=y;dfn[x]=++cnt;if (Mson[x]) dfs2(Mson[x],y);for (int i=first[x];i;i=e[i].next)if (father[x]!=e[i].to&&Mson[x]!=e[i].to)dfs2(e[i].to,e[i].to);}void ins(int l,int r,int L,int R,int k){if (L<=l&&R>=r){now[k]++;return;}int mid=l+r>>1;if (L<=mid) ins(l,mid,L,R,k<<1);if (R>mid) ins(mid+1,r,L,R,k<<1|1);}int qry(int l,int r,int x,int k){if (l==r) return now[k];int mid=l+r>>1;int ans=now[k];if (x<=mid) ans+=qry(l,mid,x,k<<1);else ans+=qry(mid+1,r,x,k<<1|1);return ans;}void add(int x,int y){for (;top[x]!=top[y];x=father[top[x]]){if (deep[top[x]]<deep[top[y]]) swap(x,y);ins(1,n,dfn[top[x]],dfn[x],1);}if (dfn[x]>dfn[y]) swap(x,y);ins(1,n,dfn[x],dfn[y],1);}int main(){scanf("%d",&n);for (int i=1;i<=n;i++)scanf("%d",&a[i]);for (int i=1;i<n;i++){int x,y;scanf("%d%d",&x,&y);e[++number].add(x,y);e[++number].add(y,x);}father[1]=0;deep[0]=0;dfs1(1);dfs2(1,1);for (int i=1;i<n;i++){int x=a[i];int y=a[i+1];add(x,y);}for (int i=1;i<=n;i++)if (i==a[1]) printf("%d\n",qry(1,n,dfn[i],1));else printf("%d\n",qry(1,n,dfn[i],1)-1);return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手指起小水泡痒怎么办 手过敏起小水泡怎么办 头皮上白色像癣怎么办 脸上长了火疖子怎么办 脸上长硬硬的包怎么办 下身体痒痒得不得了怎么办 头皮干痒头屑多怎么办 头发掉的露头皮怎么办 头上老是有结痂怎么办 婴儿头上的黄痂怎么办 头皮屑多又痒怎么办小偏方 皮肤瘙痒起红疙瘩怎么办 头又油又痒怎么办 头上反复长脓包怎么办 额头上长了粉刺怎么办 身上长红疙瘩很痒怎么办 脸上的痘痘变硬怎么办 痘痘变成硬疙瘩怎么办 痘痘变硬了怎么办知乎 痘痘里面是硬的怎么办 皮肤出油毛孔大怎么办 蹭无线网信号差怎么办 无线网离得太远怎么办 无线网不好使了怎么办 火疖子化脓破了怎么办 脸上长了个疖子怎么办 脸上起了火疖子怎么办 脸上长了火疙瘩怎么办 脸上长疖子了该怎么办? 头上神经线疼怎么办 打了肉毒发烧了怎么办 不小心吃了活蛆怎么办 吃了生蛆的东西怎么办 我的世界中毒了怎么办 如果人染了尸气怎么办 汽车没油了怎么办紧急 不小心吃氧化钾怎么办 看3d电影没眼镜怎么办 wps宏被禁用了怎么办 京东三天不发货怎么办 京东商家不退款怎么办