POJ 1330 最近公共祖先LCA_Tarjan 【水】

来源:互联网 发布:单片机嵌入式培训 编辑:程序博客网 时间:2024/06/06 03:07

最近做题做到,顺便复习一下。。。23333

#include <cstdio>#include <iostream>#include <cstring>using namespace std;#define maxn 10010int head[maxn],fa[maxn],vis[maxn],is[maxn];int que[2],ans,top;struct node{    int h,next;}line[maxn];void add(int x,int y){    line[top].h=y;line[top].next=head[x];head[x]=top++;}int fint(int x){    return x==fa[x]?x:fa[x]=fint(fa[x]);}void lca(int x){    fa[x]=x;    for(int i=head[x];i!=-1;i=line[i].next)    {        int v=line[i].h;        lca(v);        fa[v]=x;    }    int flag=0;    if(x==que[flag]||x==que[flag=!flag])    {        if(vis[que[!flag]])        {            ans=fint(que[!flag]);        }    }    vis[x]=1;}int main(){    int T;    cin>>T;    while(T--)    {        memset(head,-1,sizeof(head));        memset(vis,0,sizeof(vis));        memset(is,0,sizeof(is));        top=0;        int n;        cin>>n;        int x,y;        for(int i=0;i<n-1;i++)        {            cin>>x>>y;            add(x,y);            is[y]++;        }        int root=1;        for(int i=1;i<=n;i++) if(!is[i]) {root=i;break;}        cin>>que[0]>>que[1];        lca(root);        cout<<ans<<endl;    }    return 0;}


0 0
原创粉丝点击