51NOD1681 公共祖先 【dfs序+树状数组】
来源:互联网 发布:winaip软件的使用 编辑:程序博客网 时间:2024/06/03 10:22
传送门
首先求一遍树1的dfs序,线段树维护数组c[i]
dfs遍历树2
当进入u点时
#include<stdio.h>#include<bits/stdc++.h>#define ll long long#define lowbit(x) ((x)&(-x))using namespace std;const int N = 1e5 +5 ;int in[N],out[N];int inDeg1[N],inDeg2[N];struct BIT{ ll c[N]; int n; void init(int n){ this->n=n; fill(c,c+n+1,0); } void add(int x,ll val){ while(x<=n){ c[x]+=val; x+=lowbit(x); } } ll sum(int x){ ll ans=0; while(x){ ans+=c[x]; x-=lowbit(x); } return ans; }}bit;vector<int>G1[N],G2[N];void init(int n){ for(int i=0;i<=n;++i){ G1[i].clear(); G2[i].clear(); inDeg1[i]=inDeg2[i]=0; } bit.init(n);}void dfs(int u,int&t){ in[u]=++t; for(int v:G1[u]){ dfs(v,t); } out[u]=t;}ll f(int n){ return (ll)n*(n-1)/2;}ll ans=0;void dfs2(int u){ ll subNum=bit.sum(out[u])-bit.sum(in[u]-1); bit.add(in[u],1); for(int v:G2[u]){ dfs2(v); } ll num=bit.sum(out[u])-bit.sum(in[u]-1)-subNum; ans+=f(num-1);}ll slove(int n){ ans=0; for(int i=1,t=0;i<=n;++i){ if(inDeg1[i]==0){ dfs(i,t); } } for(int i=1;i<=n;++i){ if(inDeg2[i]==0){ dfs2(i); } } return ans;}int main(){ int n; while(~scanf("%d",&n)){ init(n); for(int i=0;i<n-1;++i){ int u,v; scanf("%d%d",&u,&v); G1[u].push_back(v); ++inDeg1[v]; } for(int i=0;i<n-1;++i){ int u,v; scanf("%d%d",&u,&v); G2[u].push_back(v); ++inDeg2[v]; } printf("%lld\n",slove(n)); } return 0;}
阅读全文
0 0
- 51NOD1681 公共祖先 【dfs序+树状数组】
- 51nod1681公共祖先(dfs序+树状数组)
- [杂题 树状数组] 51Nod1681 公共祖先
- DFS序+主席树 51Nod1681 公共祖先
- 【51Nod1681】公共祖先
- 【DFS序+树状数组】51Nod 1681 公共祖先
- 51nod 1681 公共祖先【树状数组】【DFS序】
- 51Nod 1681 公共祖先 [树状数组做法]
- 51nod 1681 公共祖先 主席树dfs序
- dfs序+树状数组
- hihocoder1067[最近公共祖先·二] DFS序+ST表
- hdu5877 dfs序+树状数组
- POJ3321 dfs序+树状数组
- POJ3321(dfs序+树状数组)
- 后缀数组,最长公共祖先
- [模板]LCA最小公共祖先(DFS+RMQ)
- POJ 3321(dfs序+树状数组)
- [BZOJ2819] Nim && dfs序 + 树状数组 + LCA
- HDU 3555 Bomb 数位dp
- C语言外挂实现原理
- 操作系统面试须知
- 二叉树的遍历
- java8,你应该了解的新特性(Stream API篇)
- 51NOD1681 公共祖先 【dfs序+树状数组】
- 【Unity】Unity Profiler 性能分析
- 远程BIOS重装系统就选KS-1001IP
- AR流程
- 程序员加班现象有多严重?
- tensorflow-队列与多线程
- Hadoop问题: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...
- Vmware workstation虚拟机中Linux系统设置共享文件
- ssh-keygen