dalao的tajan模板
来源:互联网 发布:双色球七加一中奖算法 编辑:程序博客网 时间:2024/05/15 23:54
lca:最近公共祖先
求LCA一般有用倍增的和tarjan的,
倍增的是O(nlogn)的但是可以在线;
tarjan是O(n+Q)的但是必须离线。
应当对于不同的题目适当选择。
tarjan算法的主要思想……是从要求的一对点的访问过程求来的。
比如以一个点u为根的多个小子树内,不同小子树内的点对的lca都是u。
那么可以dfs下去,回上去的时候用并查集合并整棵子树。
看懂网上的或者书上的资料之后代码其实是很简洁的……
模板题目网址
#include<bits/stdc++.h> using namespace std; int read(){ int x=0,f=1;char ch=getchar(); while (ch<'0' || ch>'9'){if (ch=='-') f=-1;ch=getchar();} while (ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } const int N=500005; int n,m,S; int Qcnt,Ecnt; int fa[N],ans[N]; bool vis[N]; struct Edge{ int next,to; }E[N<<1];int head[N]; struct Query{ int next,to,id; }Q[N<<1];int qh[N]; int getfa(int u){ if (fa[u]!=u) fa[u]=getfa(fa[u]); return fa[u]; } void add(int u,int v){ E[++Ecnt].next=head[u]; E[Ecnt].to=v; head[u]=Ecnt; } void add1(int u,int v,int t){ Q[++Qcnt].next=qh[u]; Q[Qcnt].to=v; Q[Qcnt].id=t; qh[u]=Qcnt; } void tarjan(int u){ vis[u]=1,fa[u]=u; for (int i=head[u];i;i=E[i].next){ int j=E[i].to; if (!vis[j]) tarjan(j),fa[j]=u; } for (int i=qh[u];i;i=Q[i].next){ int j=Q[i].to; if (vis[j]) ans[Q[i].id]=getfa(j); } } int main(){ n=read(),m=read(),S=read(); int x,y; for (int i=1;i<n;i++){ x=read(),y=read(); add(x,y),add(y,x); } for (int i=1;i<=m;i++){ x=read(),y=read(); add1(x,y,i),add1(y,x,i); } tarjan(S); for (int i=1;i<=m;i++) printf("%d\n",ans[i]); return 0; }
%dalao% orz
出处:%dalao%
阅读全文
0 0
- dalao的tajan模板
- 一些dalao的模板
- tajan离线求LCA 模板
- dalao的博客
- 挂一波Dalao的代码
- eoj 3279 爱狗狗的两个dalao(dfs)
- zoj 3630(tajan)求强连通分量的个数
- lca的三种算法【倍增 / RMQ / Tajan】
- IDA6.5 by dalao带arm和x86的f5
- 与dalao学校的联hu测zuo(10.26)
- 与dalao学校的联hu考ce(10.27)
- luogu 3907 :Trie 树板子(dalao勿看,水的辣眼睛)
- 与dalao学校的联shou考wan(11.2)(dp+乱搞+树形dp+期望)
- 【HNOI2017】大佬-dalao
- 请dalao过目
- 100道动态规划——14 UVA 1412 Fund Management 从刘汝佳dalao的代码里学到了很多。。。。
- 求dalao看看这题
- Codeforces Round #397(Div. 1 + Div. 2 combined)E. Tree Folding【思维+Dfs】dalao们的解法真巧妙系列QAQ
- 孪生素数
- 计蒜客 The Heaviest Non-decreasing Subsequence Problem(最大权值和非递减子序列)
- OpenCV-图像滤波
- 最大上升子序列
- 深拷贝&浅拷贝
- dalao的tajan模板
- CNN学习----创建自己的数据集
- 2017年9月24日周记
- 逻辑命令
- Android系统中常用的Uri
- 用jquery实现图片轮播
- java输入日期如何编写可视化日历代码示例
- 20170924总结
- 二进制安装和YUM安装MariaDB数据库