#include<bits/stdc++.h>
using namespace std;
struct node{
int to,nxt,lca,w;
};
const int MAXN = 500010;
node edge[MAXN*2],qedge[MAXN*2];
int head[MAXN*2],qhead[MAXN*2];
int father[MAXN],vis[MAXN],dis[MAXN];
int l1,l2;
void add(int u,int v,int w)
{
edge[++l1].to=v;
edge[l1].w=w;
edge[l1].nxt=head[u];
head[u]=l1;
}
void qadd(int u,int v)
{
qedge[++l2].to=v;
qedge[l2].nxt=qhead[u];
qhead[u]=l2;
}
int find(int x)
{
if(father[x]!=x) father[x]=find(father[x]);
return father[x];
}
void bfs(int s)//bfs求深度
{
queue<int> q;
memset(dis,-1,sizeof(dis));
q.push(s);dis[s]=0;
while(!q.empty())
{
int now=q.front();
q.pop();
for(int i=head[now];i;i=edge[i].nxt)
{
int v=edge[i].to;
if(dis[v]==-1)
{
dis[v]=dis[now]+edge[i].w;
q.push(v);
}
}
}
}
void dfs(int u)
{
father[u]=u;
vis[u]=1;
for(int i=head[u];i;i=edge[i].nxt)
{
int v=edge[i].to;
if(!vis[v])
{
dfs(v);
father[v]=u;
}
}
for(int i=qhead[u];i;i=qedge[i].nxt)
{
int v=qedge[i].to;
if(vis[v])
{
qedge[i].lca=find(v);
if(i%2)
{
qedge[i+1].lca=qedge[i].lca;
}
else
{
qedge[i-1].lca=qedge[i].lca;
}
}
}
}
int main()
{
int n,m,s;
scanf("%d%d%d",&n,&m,&s);
for(int i=1;i<n;i++)
{
int u,v;
scanf("%d%d",&u,&v);
add(u,v,0);
add(v,u,0);
}
for(int i=1;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
qadd(u,v);
qadd(v,u);
}
dfs(s);
for(int i=1;i<=m;i++)
{
printf("%d\n",qedge[i*2].lca);
}
}
contest_tarjan_LCA_源码
版权申诉
40 浏览量
2021-10-03
18:10:24
上传
评论
收藏 500KB ZIP 举报
西西nayss
- 粉丝: 70
- 资源: 4754
最新资源
- 农村信用社联合社计算机信息系统投产与变更管理办.docx
- 农村信用社联合社计算机信息系统数据管理办法.docx
- 利用SPSS作临床效度分析线上计算网站介绍-医学研究部统计谘.(医学PPT课件).ppt
- 利用Zabbix监控mysqldump定时备份数据库状态.docx
- 利用计算机解决问题的基本过程.doc
- 化工铁路通信工程总结.doc
- 北京大学网络教育软件工程作业.docx
- 医药公司(连锁店)计算机操作规程未新系统的自行按照旧制修改-新系统过制的编号加修模版.doc
- 医药公司(连锁店)计算机系统操作规程模版.doc
- 医药连锁门店计算机系统的操作和管理程序未新系统的自行按照旧制修改-新系统过制的编号加修模版.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0