tarjan-LCA模板
洛谷P3379
#include <cstdio>
using namespace std;
const int max_n=;
struct etype{
int t,next;
};
struct qtype{
int t,next,id;
};
etype e[*max_n];
qtype q[*max_n];
int a[max_n],b[max_n],ans[max_n],fa[max_n];
bool vis[max_n];
int cnt;
void addedge(int u,int v)
{
cnt++;
e[cnt].t=v;e[cnt].next=a[u];a[u]=cnt;
}
void addquery(int i,int u,int v)
{
cnt++;
q[cnt].t=v;q[cnt].id=i;q[cnt].next=b[u];b[u]=cnt;
}
int findfather(int k)
{
if (fa[k]==k) return k;
fa[k]=findfather(fa[k]);
return fa[k];
}
void dfs(int k)
{
fa[k]=k;vis[k]=true;
int i=b[k];
while (i>)
{
if (vis[q[i].t])
{
if (ans[q[i].id]==) ans[q[i].id]=findfather(q[i].t);
}
i=q[i].next;
}
i=a[k];
while (i>)
{
if (!vis[e[i].t])
{
dfs(e[i].t);
fa[e[i].t]=k;
}
i=e[i].next;
}
}
int main()
{
int n,m,s;
scanf("%d%d%d",&n,&m,&s);
for (int i=;i<=n;i++) a[i]=;
cnt=;
for (int i=;i<n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
addedge(x,y);addedge(y,x);
}
for (int i=;i<=n;i++) b[i]=;
cnt=;
for (int i=;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
addquery(i,x,y);addquery(i,y,x);
}
for (int i=;i<=n;i++) vis[i]=false;
for (int i=;i<=m;i++) ans[i]=;
dfs(s);
for (int i=;i<=m;i++) printf("%d\n",ans[i]);
return ;
}
tarjan-LCA模板的更多相关文章
- hdu 2586 How far away?(LCA模板题+离线tarjan算法)
How far away ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- POJ 1330 Nearest Common Ancestors(LCA模板)
给定一棵树求任意两个节点的公共祖先 tarjan离线求LCA思想是,先把所有的查询保存起来,然后dfs一遍树的时候在判断.如果当前节点是要求的两个节点当中的一个,那么再判断另外一个是否已经访问过,如果 ...
- LCA模板
/*********--LCA模板--***************/ //设置好静态参数并构建好图的邻接表,然后调用lca_setquery()设置查询 //最后调用lca_start(),在lca ...
- bzoj 1602 [Usaco2008 Oct]牧场行走(LCA模板)
1602: [Usaco2008 Oct]牧场行走 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 379 Solved: 216[Submit][Sta ...
- 倍增求lca模板
倍增求lca模板 https://www.luogu.org/problem/show?pid=3379 #include<cstdio> #include<iostream> ...
- Tarjan+LCA【洛谷P2783】 有机化学之神偶尔会做作弊
[洛谷P2783] 有机化学之神偶尔会做作弊 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 有一天他一边搓炉石一边监考,而你作为一个信息竞赛的大神也来凑热闹. 然而你的化竞基友却向你求助了. ...
- HDU 2586——How far away ?——————【LCA模板题】
How far away ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- poj 3417 Network(tarjan lca)
poj 3417 Network(tarjan lca) 先给出一棵无根树,然后下面再给出m条边,把这m条边连上,然后每次你能毁掉两条边,规定一条是树边,一条是新边,问有多少种方案能使树断裂. 我们设 ...
- 算法复习——LCA模板(POJ1330)
题目: Description A rooted tree is a well-known data structure in computer science and engineering. An ...
- LCA模板(数剖实现)
题目链接:https://www.luogu.org/problemnew/show/P3379 题意:LCA模板题. 思路:今天开始学树剖,先拿lca练练.树剖解lca,两次dfs复杂度均为O(n) ...
随机推荐
- ASP.NET-配置Dubug和Release生成不同的Web.config
配置 Dubug 和 Release 生成不同的 Web.config Web.config Transformation Syntax for Web Application Project Dep ...
- 单击EasyUI的datagrid行时不选中
单击EasyUI的datagrid行时不选中,行背景色不变,点击选择框checkbox时选中该行 核心代码: $("#msgList").datagrid({ url ...
- C#=> 栈模仿堆的操作
//原理,利用两个栈,互相作用,来模仿堆的效果,先进先出.. using System; using System.Collections.Generic; using System.Linq; us ...
- Java实现红黑树
转自:http://www.cnblogs.com/skywang12345/p/3624343.html 红黑树的介绍 红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉 ...
- sql片段的定义
<!-- sql片段 id 表示唯一标示 这里不加where是因为 sql片段只对单表查询才抽取出来 这样的重用性更高 --> <sql id="query_user_wh ...
- Lua中C API栈操作
向栈中压入数据: lua_pushnil(lua_State*); lua_pushboolean(lua_State*, bool); lua_pushnumber(lua_State*, lua_ ...
- 二叉树BinTree4种遍历及其应用
前序遍历 template<class T> void BinTree<T>::PreOrder(BinTreeNode<T>*subTree){ //前序遍历以s ...
- [暑假集训Day3T3]平板涂色
同样是搜索经典题. 优化并不多,只需在当前步数已经大于目前答案时剪枝就可以了. 此题重点在于如何判断第k个矩形能不能选. 设矩形i的左上坐标为i(squ[i].upx,squ[i].upy),右下角坐 ...
- Java并发编程:进程的创建
Java并发编程:进程的创建 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #839496;} J ...
- var、let、const的区别
var.let.const的区别 var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问. let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问. const用来定义常量,使 ...