首页 > 其他分享 >共同祖先

共同祖先

时间:2023-09-11 16:35:46浏览次数:28  
标签:祖先 lenYu 小宇 int while vec ancestorMing 共同

题目

https://kamacoder.com/problem.php?id=1010

小明发现和小宇有共同祖先!现在小明想知道小宇是他的长辈,晚辈,还是兄弟。

输入包含多组测试数据。每组首先输入一个整数N(N<=10),接下来N行,每行输入两个整数a和b,表示a的父亲是b(1<=a,b<=20)。小明的编号为1,小宇的编号为2。
输入数据保证每个人只有一个父亲。

对于每组输入,如果小宇是小明的晚辈,则输出“You are my younger”,如果小宇是小明的长辈,则输出“You are my elder”,如果是同辈则输出“You are my brother”。

主要考察对拓扑的理解,不需要使用排序,而是要从共同祖先这个点入手,所以需要不停地向上取值,然后根据路径长度来判断。

题解

#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int n;
	while (cin >> n)
	{
	    vector<int> vec(21, 0);
        int a, b;
	    while (n--)
	    {
	        cin >> a >> b;
	        vec[a] = b;
	    }
	    int lenMing = 0, lenYu = 0;
	    int ancestorMing = vec[1], ancestorYu = vec[2];
	    while (ancestorMing != 0)
	    {
	        ancestorMing = vec[ancestorMing];
	        lenMing++;
	    }
	    while (ancestorYu != 0)
	    {
	        ancestorYu = vec[ancestorYu];
	        lenYu++;
	    }
	    if (lenMing == lenYu) cout << "You are my brother" << endl;
	    else if (lenMing > lenYu) cout << "You are my elder" << endl;
	    else cout << "You are my younger" << endl;
	}

	return 0;
}

标签:祖先,lenYu,小宇,int,while,vec,ancestorMing,共同
From: https://www.cnblogs.com/comein/p/17693836.html

相关文章

  • java版本剑指offer:在二叉树中找到两个节点的最近公共祖先
    java版本剑指offer:在二叉树中找到两个节点的最近公共祖先描述给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值o1和o2,请找到o1和o2的最近公共祖先节点。注:本题保证二叉树中每个节点的val值均不相同。示例1输入:[3,5,1,6,2,0,8,#,#,7,4],5,1返回值:3方法一:递......
  • 26.二叉树的最近公共祖先
    236.二叉树的最近公共祖先1、概要给定一个二叉树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个结点p、q,最近公共祖先表示为一个结点x,满足x是p、q的祖先且x的深度尽可能大(一个节点也可以是它自己的祖先)。”说明:所......
  • 力扣---1123. 最深叶节点的最近公共祖先
    给你一个有根节点 root 的二叉树,返回它 最深的叶节点的最近公共祖先 。回想一下:叶节点 是二叉树中没有子节点的节点树的根节点的 深度 为 0,如果某一节点的深度为 d,那它的子节点的深度就是 d+1如果我们假定 A 是一组节点 S 的 最近公共祖先,S 中的每个节点都在......
  • 智安网络|加强软件供应链安全保障:共同抵御威胁的关键路径
    在当今数字化时代,软件供应链安全成为了一个备受关注的话题。各行各业都依赖于软件产品和服务来支持其业务运营。然而,随着供应链的不断扩大和复杂化,软件供应链安全问题也日益突出。那么应该如何解决?首先,软件供应链安全问题的重要性不容忽视。软件供应链是指整个软件开发、交付和维护......
  • 《剑指Offer》-68-二叉树的最近公共祖先
    二叉搜索树 TreeNode*lowestCommonAncestor(TreeNode*root,TreeNode*p,TreeNode*q){ //如果p、q一定存在,那么root就一定不是空指针 TreeNode*traverse=root; while(true){ if(p->val<traverse->val&&q->val<traverse->val)traverse=tra......
  • 剑指 Offer 68 - II. 二叉树的最近公共祖先(简单)
    题目:classSolution{public:TreeNode*lowestCommonAncestor(TreeNode*root,TreeNode*p,TreeNode*q){if(root==p||root==q||root==nullptr)returnroot;//如果当前节点为空或者当前节点即为其中某个指定节点TreeNode*left=lowestCommo......
  • 代码随想录算法训练营第二十二天| 235. 二叉搜索树的最近公共祖先 701.二叉搜索树
      235. 二叉搜索树的最近公共祖先    卡哥建议:相对于 二叉树的最近公共祖先 本题就简单一些了,因为 可以利用二叉搜索树的特性。   题目链接/文章讲解:https://programmercarl.com/0235.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E8%B......
  • 二叉搜索树的公共祖先
    力扣(LeetCode)官网-全球极客挚爱的技术成长平台1TreeNode*lowestCommonAncestor(TreeNode*root,TreeNode*p,TreeNode*q){2if(root==nullptr||root==p||root==q)returnroot;3//如果该结点比两个结点都大或则都小,则只需要搜索右子树或左子树,而......
  • leetcode236求最近公共祖先
    递归TreeNode*dfs(TreeNode*root,TreeNode*p,TreeNode*q){if(!root)returnroot;//当发现这个节点已经是叶节点时,要告诉上层if(root==p||root==q)returnroot;//当发现是p节点或者q时也要告诉上层TreeNode*left=dfs(root->left,p,q);//左子树是否有p或者q......
  • 二叉树的最近公共祖先
    235.二叉搜索树的最近公共祖先-力扣(LeetCode)经验1:在二叉树中找满足条件的结点的问题一般使用后续遍历,也就是说如果找到了这个结点那么就将它返回给上层,然后层层返回最终返回到根结点经验2:本题的解题技巧:如果在某一结点找到了p或q,那么就不用往下递归了,直接将这个结点返回,即便......