一个hexo博客折腾了好久。目前有基本功能,但还不完善,等什么时候整完了继续写。
总的来说就是一个个人的树洞吧,目前国内环境挺糟的,这里那里都不让说话,所以gitee什么的是不会考虑的。
本博客是按照 anzhiy.cn 的教程一步一步搭的积木。
现在是2022年9月11日,想要的功能基本都有了,其他很多的功能并不需要(当然主要是我懒)。设计的终点果然就是简洁,而生活的终点是断舍离?
博客的图片都放在第三方图床里,如果挂了可与我联系。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| #include<bits/stdc++.h> #define MAXN 500015 #define MAXM MAXN-1 using namespace std;
int n,max0,d,tot,x,y,tempu,tempv; int size[MAXN],head[MAXN],dep[MAXN]; int fa[MAXN<<1][20];
struct node{ int u,v,next; }edge[MAXM<<1];
inline void addedge(int x,int y) { edge[++tot].u=x; edge[tot].v=y; edge[tot].next=head[x]; head[x]=tot; }
inline void input() { scanf("%d",&n); max0=(int)(log(n)/log(2))+3; for(int i=1;i<n;i++) { scanf("%d%d",&x,&y); addedge(x,y);addedge(y,x); } }
int lcainit(int x) { for(int i=1;i<=max0;i++) if(fa[x][i-1]) fa[x][i]=fa[fa[x][i-1]][i-1]; else break; for(int i=head[x];i;i=edge[i].next) { int y=edge[i].v; if(y!=fa[x][0]) { fa[y][0]=x;dep[y]=dep[x]+1; size[x]+=lcainit(y); } } return size[x]; }
inline int LCA(int u,int v) { if(dep[u]<dep[v])swap(u,v); int delta=dep[u]-dep[v]; for(int x=0;x<=max0;x++) if((1<<x)&delta)u=fa[u][x]; if(u==v)return u; for(int x=max0;x>=0;x--) if(fa[u][x]!=fa[v][x]) { u=fa[u][x]; v=fa[v][x]; } tempu=u; tempv=v; return fa[u][0]; }
int main() { for(int i=0;i<MAXN;i++) size[i]=1; input(); lcainit(1); int m; cin>>m; while(m--) { scanf("%d%d",&x,&y); if(x==y){printf("%d\n",n);continue;} int lca=LCA(x,y); if(dep[x]<dep[y])swap(x,y); d=dep[x]+dep[y]-(dep[lca]<<1); if(d&1) {printf("0\n");continue;} if(dep[x]==dep[y]) { int ans=n-size[tempu]-size[tempv]; printf("%d\n",ans); continue; } int delta=d>>1; int midson,mid; for(int i=max0;i>=0;i--) { if((1<<i)&(delta-1)) x=fa[x][i],delta-=(1<<i); if(delta==1) midson=x,mid=fa[x][0]; } int ans=size[mid]-size[midson]; printf("%d\n",ans); } return 0; }
|