| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:(其实就是 并查集),没有复杂的数据结构和算法哦~In Reply To:提供一个简单的思路,没有复杂的数据结构和算法哦~ Posted by:dahai1990 at 2012-11-28 11:08:52 > 问题就是求x和y的最近公共祖先。
> 思路:把x到根节点的路径标记一下,然后去搜y到根节点的路径,碰到的第一个就是答案了。具体实现看代码:
>
> #include <iostream>
> #include <memory.h>
> using namespace std;
> const int maxn=10005;
> int vis[maxn],p[maxn];
> int main()
> {
> int T,n,i,x,y;
> cin>>T;
> while(T--)
> {
> cin>>n;
> memset(vis,0,sizeof(vis));
> memset(p,0,sizeof(p));
> for(i=1;i<n;i++)
> {
> cin>>x>>y;
> p[y]=x;
> }
> cin>>x>>y;
> while(x){
> vis[x]=1;
> x=p[x];
> }
> while(y){
> if(vis[y]) break;
> y=p[y];
> }
> cout<<y<<endl;
> }
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator