Poj 1330Nearest Common Ancestors

Posted _Mashiro

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Poj 1330Nearest Common Ancestors相关的知识,希望对你有一定的参考价值。


http://poj.org/problem?id=1330

题目意思就是T组树求两点LCA.

这个可以离线DFS(Tarjan)-----具体参考

O(Tn) 0ms

还有其他在线O(Tnlogn)也可参考LCA

// This file is made by YJinpeng,created by XuYike\'s black technology automatically.
// Copyright (C) 2016 ChangJun High School, Inc.
// I don\'t know what this program is.

#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#define IN inline 
#define RG register 
using namespace std;
typedef long long LL;
const int N=10010;
const int M=10010;
inline int gi() {
	register int w=0,q=0;register char ch=getchar();
	while((ch<\'0\'||ch>\'9\')&&ch!=\'-\')ch=getchar();
	if(ch==\'-\')q=1,ch=getchar();
	while(ch>=\'0\'&&ch<=\'9\')w=w*10+ch-\'0\',ch=getchar();
	return q?-w:w;
}
int t;int to[M],ne[M];
int fr[N],f[N],d[N],g[N];
IN void link(RG int u,RG int v){
    to[++t]=v;ne[t]=fr[u];fr[u]=t;
}
IN int find(int x){return f[x]==x?x:f[x]=find(f[x]);}
IN bool dfs(RG int x){
    f[x]=x;d[x]=1;
    for(int o=fr[x];o;o=ne[o]){
        if(dfs(to[o]))return 1;
        f[to[o]]=x;
        if(g[to[o]]&&d[g[to[o]]]){
            g[to[o]]=g[g[to[o]]]=find(g[to[o]]);
            return true;
        }
    }return 0;
}
int main()
{
    freopen("1330.in","r",stdin);
    freopen("1330.out","w",stdout);
	int T=gi();
    while(T--){
        int n=gi(),m=n-1;t=0;
        memset(fr,0,sizeof(fr));
        memset(d,0,sizeof(d));
        while(m--){
            int u=gi(),v=gi();
            n=max(max(u,v),n);d[v]++;
            link(u,v);
        }int x=gi(),y=gi();
        g[x]=y,g[y]=x;
        for(int i=1;i<=n;i++)
            if(!d[i]){
                memset(d,0,sizeof(d));
                dfs(i);break;
            }
        printf("%d\\n",g[x]);g[x]=g[y]=0;
    }
	return 0;
}

  

以上是关于Poj 1330Nearest Common Ancestors的主要内容,如果未能解决你的问题,请参考以下文章

poj 1330 Nearest Common Ancestors

Poj 1330Nearest Common Ancestors

POJ 1330 Nearest Common Ancestors LCA题解

poj1330 Nearest Common Ancestors (最近公共祖先)

POJ1330 Nearest Common Ancestors

poj-1330 Nearest Common Ancestors