文章标题

原创 2016年08月30日 23:26:45

输入一颗有根树,最后有一个询问,请输出询问中两个节点的最近公共祖先也就是LCA。


#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <algorithm>
using namespace std;

const int n = 10001;

bool root[n]; // 判断是否为根节点
bool vis[n];
int pre[n];
vector <int> e[n];//储存子节点
vector <int> q[n];//储存查询
int lca[n]; //储存最近公共祖先
int t, n1;
void init()
{
    scanf("%d", &n1);
    for(int i = 0; i <= n1; i++)
    {
        e[i].clear();
        q[i].clear();
        root[i] = true;
        vis[i] = false;
        pre[i] = i;
    }
    int a, b;
    for(int i = 1; i < n1; i++)
    {
        scanf("%d %d", &a, &b);
        e[a].push_back(b);
        root[b] = false;
    }
    scanf("%d %d", &a, &b);
    q[a].push_back(b);
    q[b].push_back(a);
    return;
}

int finn(int x)
{
    int z, y = x;
    while(y != pre[y])
    {
        y = pre[y];
    }
    while(x != pre[x])
    {
        z = pre[x];
        pre[x] = y;
        x = z;
    }
    return y;
}

void dataprocess(int x)
{
    lca[x] = x;
    int len = e[x].size();
    for(int i = 0; i < len; i++)
    {
        dataprocess(e[x][i]); //求e[x][i]及其子节点等的lca
        pre[e[x][i]] = x; // 合并,但是我们不需要专门的合并函数
    }
    vis[x] = true;
    len = q[x].size();
    for(int i = 0; i < len; i++)
    {
        if(vis[q[x][i]])
        {
            printf("%d\n", lca[finn(q[x][i])]);
        }
        return;
    }
    return;
}


int main()
{
    scanf("%d", &t);
    while(t--)
    {
        init();
        for(int i = 1; i <= n; i++)
        {
            if(root[i])
            {
                dataprocess(i);
                break;
            }
        }
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

文章标题自动标注程序

  • 2015年06月25日 17:04
  • 6.93MB
  • 下载

在文章中主标题和副标题的格式问题

请问:如果 大标题居中书写。正常情况下,副标题要在大标题第三个字下开始写破折号,是吗?那如果格数不够,副标题写不开了怎么办?可以把副标题居中写吗? 还是把 大标题和副标题整体前移?不是论文,手写的,公...

文章标题上下轮番滚动.zip

  • 2012年09月04日 12:31
  • 28KB
  • 下载

文章标题CCF201509-4高速公路

问题描述   某国有n个城市,为了使得城市间的交通更便利,该国国王打算在城市之间修一些高速公路,由于经费限制,国王打算第一阶段先在部分城市之间修一些单向的高速公路。   现在,大臣们帮国王拟了一个...

文章标题 UVALive 7045:Last Defence(辗转相除思想)

Last DefenceGiven two integers A and B. Sequence S is defined as follow: • S0 = A • S1 = B • Si = |Si...

文章标题:Android常见控件ImageView的使用方法

ImageView是用于在界面上展示图片的一个控件,通过它可以上我们的程序界面变得更加丰富多彩。我们需要在drawable中放一张格式为Png的图片。那我们在界面上展示这张图片吧。我们在activit...
  • wen0801
  • wen0801
  • 2017年04月06日 00:16
  • 104

文章标题 spark读取文件过程中发现的问题解决记录

spark读取本地文件的方式是给路径加上file://,例如sc.textFile(“/opt/software/spark1.4/README.md”),我发现一个问题就是,我的spark软件安装在...

一篇好的原创文章首先从标题开始做起

标题是内容的眼睛,一个好的标题应该不仅可以使用户了解到页面的主要内容,还应该引起用户阅读内容的星期。在撰写文章标题时除要重视和布局分词、以命中更多的长尾搜索词外,还应该能够吸引用户点击。    ...

文章标题spring-boot + spring-data-jpa 实现简单的增删改查

JPA(Java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有Hibernate、TopLink等。 示例环境 jdk 1.8 spring-boot 2....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:文章标题
举报原因:
原因补充:

(最多只允许输入30个字)