L2-016 愿天下有情人都是失散多年的兄妹 (25 分)

2023-11-17

题目

题目链接

题解

DFS。


孩子向父母方向连边,将孩子视为根节点。

首先判断输入两个人的性别,如果不同再分别以二者为起点进行dfs,前者五服之内的亲属都标记一下,以后者为起点dfs,如果遇到了标记的人,那么说明五服之内存在公共祖先,不可以结婚。


我一直在思考怎么用倍增法计算最近公共祖先,但是死活想不出来,因为一个孩子有一对父母,这和一般的公共祖先还不一样,最近公共祖先是一个父节点有多个节点,而本题是一个子节点有多个父节点;如果将孩子理解为父节点,父母理解为子节点,虽然构造出最近公共祖先问题,但是并不知道要计算哪两个子节点的公共祖先,所以本质上不是一类问题。

代码

#include <bits/stdc++.h>
using namespace std;

const int N = 1e4+10, M = 1e6+10;

int flag, n, k;
int e[M], ne[M], h[M], idx;
int gender[M], st[M];

void add (int a, int b) {
	e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}

void dfs (int x, int dp) {
	
	if (flag == 1) return ;
	if (dp >= 5) return ;
	
	for (int i = h[x]; ~i;i = ne[i]) {
		int j = e[i];
		if (st[j]) {
			flag = 1;
			return ;
		}
		st[j] = 1;
		dfs (j, dp + 1);	
	}
}

int main () {
	cin >> n;
	memset (h, -1, sizeof h);
	memset (gender, -1, sizeof gender);
	
	for (int i = 0;i < n;i ++) {
		int id, fid, mid;
		char sex;
		cin >> id >> sex >> fid >> mid;
		if (fid != -1) add (id, fid), gender[fid] = 1;
		if (mid != -1) add (id, mid), gender[mid] = 0;
		gender[id] = (sex == 'M');
	}
	
	cin >> k;
	while (k --) {
		int a, b;
		cin >> a >> b;
		if (gender[a] == gender[b] || gender[a] == -1 || gender[b] == -1) 
			puts("Never Mind");
		else {
			memset (st, 0, sizeof st);
			st[a] = 1;
			st[b] = 1;
			flag = 0;
			dfs (a, 1);
			dfs (b, 1);
			if (flag) puts ("No");
			else puts ("Yes"); 
		}
	}
	
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

L2-016 愿天下有情人都是失散多年的兄妹 (25 分) 的相关文章

随机推荐

  • C/C++:06. 模板

    文章目录 前言 一 函数模板 二 类模板 三 函数模板重载 总结 前言 C 的模板是被迫推出的 最直接的动力来源于对数据结构的封装 数据结构关乎的是数据的存储 以及存储后如何进行增加 删除 修改和查询操作 在实际开发中有着非常广泛的应用 C
  • UWSGI学习笔记

    uwsgi spooler可以用来实现Cron Task调度和非阻塞Task django相关安装包 uwsgidecorators 1 1 0 uwsgi tasks 0 6 4
  • c语言冒泡法对10个整数由大到小排序,用冒泡法对10个整数排序

    公告 为响应国家净网行动 部分内容已经删除 感谢读者理解 话题 用冒泡法对10个整数排序 10个整数用scanf函数输入回答 举了例 一个数组 3 2 5 1 4从小到大排序从左侧开始 逐对比较32 3 2的位置 数组变为2 3 5 1 4
  • git修改仓库名次之后,本地仓库重定向问题

    在github网页中更改了项目的名次 再次推送的时候报这样的错误fatal repository https xxx git not founds 使用下面的命令将推送的远程仓库重定向 git remote set url origin u
  • 数据压缩与管理:掌握Linux VDO和LVM的力量

    1 逻辑卷 LVM Logical Volume Management 动态的为服务器磁盘添加空间 而不会影响原磁盘的数据 也不需要对原始磁盘重新分区 1 1 LVM介绍 以下是LVM的示意图 我们拿到一块硬盘后首先对齐进行划分分区 也就得
  • [免签约]微信+支付宝个人收款解决方案

    方案原理 使用一台闲置的安卓手机专门用来做收款 收到付款时手机会有通知提示 对该通知进行监控 监控到后发送数据到服务器 服务器根据订单情况支付情况判断是否成功完成一轮下单支付操作 如果成功则自动发货 具体实现流程 网页前端展示商品 用户浏览
  • 华容道html源码,华容道(项目源代码)

    实例简介 Java华容道游戏完整代码 添加了图片与音效 设置了三个关卡 有注释 实例截图 核心代码 华容道 项目源代码 华容道 bin HuaRong About class BackgroundPanel class HuaRong 1
  • 学习PySOT避坑指南

    PySOT是商汤 SenseTime视频智能研究团队 开源的目标跟踪库 实现了最新的单目标跟踪算法 主要包含 SiamRPN SiamMask 使用Python编写的 基于Pytorch深度学习框架 该软件系统还包含了评估跟踪算法的Pyth
  • Java生成6位随机码(大小写+数字)

    char sources new char a b c d e f g h i j k l m n
  • 【Taro】微信小程序隐私协议改造

    微信要求小程序开发者在2023 9 15日前将小程序中调用获取用户隐私api的接口时 都必须要先让用户授权 如果用户拒绝授权 那么小程序的对应接口或组件将直接禁用 那么首先 请将微信小程序开发者工具 详情 本地设置 基础调试库 切换至2 3
  • QT实现用户登录功能

    功能 1 提供登录界面 客户端 2 服务器端用数据库来存储用户名和密码 3 注册时客户端将注册信息发送给服务器端 并进行验证 如果注册名可用 添加进数据库并返回客户端添加成功信息 4 登录时客户端将登录信息发送给服务器端进行验证 服务端返回
  • Ubuntu14.04下配置CGAL+boost+QT+Suitesparse

    这两天突然间想把以前在linux在没有调通的程序给调通 这个程序需要用到CGAL和Suitesparse 稀疏矩阵计算 大家上网查哈 而CGAL又依赖于boost 和QT 所以总共需要安装boost QT suitesparse和CGAL
  • java二维数组的创建,java二维数组创建方法

    java动态创建二维数组 从零学java笔录 第31篇 图解二位数组在内存中存储 java二维数组动态赋值 java二维数组创建方法 二维数组的定义 type arrayName type arrayName Java 二维数组的声明 初始
  • 数据可视化入门学习——Jupyter Notebook 和绘图有关的几个魔术指令

    数据可视化 Jupyter Notebook 和绘图有关的几个魔术指令 matplotlib inline 这是默认的模式 输出的图片是静态的 matplotlib auto 在这个模式下会弹出一个单独 的绘图窗口 和在pycharm中一样
  • MyBatis枚举映射类讨论

    前言 本篇需要对于MyBatis有一定的认识 而且只是针对于TypeHandler接口来讨论 暂不讨论其他方面的问题 TypeHandler概叙 TypeHandler是MyBatis设计的一个用于参数的接口 你们会不会很好奇MyBatis
  • 【error】 java.net.MalformedURLException: no protocol,未指定通信协议

    目录 1 报错信息 2 报错原因 3 处理方法 1 报错信息 在通过 IP 地址及端口号调用远程方法时 报错信息如下 java net MalformedURLException no protocol 由 no protocol 可知 系
  • 海凌科7621开发板适配新版openwrt

    最近在海凌科买了一块7621的开发板 flash是32M的 ddram是256M的 性价比感觉不错 海凌科提供的openwrt是比较旧的版本 在openwrt最新的19 07版本里已有的硬件都有一定的差距 因此修改一下相关配置 可以用ope
  • PHP如何使用循环语句?用法详细指南

    像任何其他语言一样 PHP中的循环用于多次执行一条语句或一段语句 直到满足特定条件为止 这有助于用户节省多次编写同一代码的时间和精力 PHP支持四种类型的循环技术 for循环 while循环 循环执行 foreach循环 现在让我们详细了解
  • 包装类自动装箱和拆箱原理

    包装类的自动装箱和自动拆箱 包装类的自动装箱和拆箱是JDK1 5的新特性 一 首先 了解自动装箱的过程 有两种自动装箱过程 第一种 128 127 之内 调用相应包装类的valueOf 例如 Integer i 12 Integer a 2
  • L2-016 愿天下有情人都是失散多年的兄妹 (25 分)

    题目 题目链接 题解 DFS 孩子向父母方向连边 将孩子视为根节点 首先判断输入两个人的性别 如果不同再分别以二者为起点进行dfs 前者五服之内的亲属都标记一下 以后者为起点dfs 如果遇到了标记的人 那么说明五服之内存在公共祖先 不可以结