#include<stdio.h>
#include<stdlib.h>
const int maxn=1000;
int e,to[maxn],next[maxn],begin[maxn];
int e1,to1[maxn*10],next1[maxn*10],begin1[maxn];
int p[maxn],fa[maxn],t[maxn];
int find(int x){
if(fa[x]!=x)
fa[x]=find(fa[x]);
return fa[x];
}
void dfs(int x){
int i,j,k;
for(i=begin[x];i;i=next[i]){
k=to[i];
dfs(k);
fa[k]=x;
}
p[x]=1;
for(i=begin1[x];i;i=next1[i]){
k=to1[i];
if(p[k])
printf("(%d %d)=%d\n",k,x,find(k));
}
}
int main(){
int i,j,k,m,n,u,v;
scanf("%d",&n);
for(i=1;i<=n;i++)fa[i]=i;
for(i=1;i<=n;i++){
scanf("%d%d",&k,&m);
for(j=1;j<=m;j++){
scanf("%d",&u);
t[u]=1;
to[++e]=u;
next[e]=begin[k];
begin[k]=e;
}
}
scanf("%d",&m);
for(j=1;j<=m;j++){
scanf("%d%d",&u,&v);
to1[++e1]=v;
next1[e1]=begin1[u];
begin1[u]=e1;
to1[++e1]=u;
next1[e1]=begin1[v];
begin1[v]=e1;
}
for(i=1;i<=n;i++)
if(t[i]==0){
dfs(i);
break;
}
system("pause");
return 0;
}
LCA之TARJAN算法
最新推荐文章于 2023-12-12 16:13:44 发布