1388:家谱(gen)

【题解】P2814 家谱 题目 题目背景 现代的人对于本家族血统越来越感兴趣。 题目描述 给出充足的父子关系,请你编写程序找到某个人的最早的祖先。 输入格式 输入由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系中父亲只有一行,儿子可能有若干行,用 #name 的形式描写一组父子关系中的父亲的名字,用 +name 的形式描写一组父子关系中的儿子的名字;接下来用 ?name 的形式表示要求该人的最早的祖先;最后用单独的一个 $ 表示文件结束。 输出格式 按照输入文件的要求顺序,求出每一个要找祖先的人的祖先,格式为:本人的名 阅读详情

【题目描述】

现代的人对于本家族血统越来越感兴趣,现在给出充足的父子关系,请你编写程序找到某个人的最早的祖先。

【输入】

由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系由二行组成,用#name的形式描写一组父子关系中的父亲的名字,用+name的形式描写一组父子关系中的儿子的名字;接下来用?name的形式表示要求该人的最早的祖先;最后用单独的一个$表示文件结束。规定每个人的名字都有且只有6个字符,而且首字母大写,且没有任意两个人的名字相同。最多可能有1000组父子关系,总人数最多可能达到50000人,家谱中的记载不超过30代。

【输出】

按照输入的要求顺序,求出每一个要找祖先的人的祖先,格式:本人的名字+一个空格+祖先的名字+回车。

【输入样例】

#George
+Rodney
#Arthur
+Gareth
+Walter
#Gareth
+Edward
?Edward
?Walter
?Rodney
?Arthur
$

【输出样例】

Edward Arthur
Walter Arthur
Rodney George
Arthur Arthur

字符串形式的并查集

#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;

map<string,int>name;  //名字对应下标
map<int,string>num;   //下标对应名字
map<string,bool>b;    //是否访问过
int f[50005];  //并查集数组
string s,ss;
int i,j,k,len,father;
bool pd=false;

int find(int x)
{
    if (f[x]==x)
        return f[x];
    f[x]=find(f[x]);
    return f[x];
}

void merge(int x,int y)   //并查集连接
{
    int f1=find(x);
    int f2=find(y);
    f[f1]=f2;
    return;
}

int main()
{
    for (i=1; i<=50000; ++i) //并查集初始化
        f[i]=i;
    i=0;
    while (cin>>s)
    {
        if (s=="$")
            break;
        if (s[0]=='#'||s[0]=='+')
        {
            len=s.length();
            ss=s.substr(1,len-1);
            if (!b[ss])   //以前没出现过
            {
                i++;
                name[ss]=i;
                b[ss]=true;
                num[i]=ss;
                if (s[0]=='#')
                    father=i;
                if (s[0]=='+')
                    merge(i,father);
            }
            else    //出现过
            {
                if (s[0]=='#')
                    father=name[ss];
                if (s[0]=='+')
                    merge(name[ss],father);
            }
        }
        if (s[0]=='?')
        {
            if(pd==false)
                for (j=1; j<=i; ++j)
                    k=find(j);
            pd=true;
            len=s.length();
            ss=s.substr(1,len-1);
            cout<<ss;
            cout<<" ";
            cout<<num[f[name[ss]]]<<endl;
        }
    }
    return 0;
}

 

oj|家谱gen(1292)(绝对正确) 由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系由二行组成,用#name的形式描写一组父子关系中的父亲的名字,用+name的形式描写一组父子关系中的儿子的名字;name的形式表示要求该人的最早的祖先;规定每个人的名字都有且只有6个字符,而且首字母大写,且没有任意两个人的名字相同。现代的人对于本家族血统越来越感兴趣,现在给出充足的父子关系,请你编写程序找到某个人的最早的祖先。按照输入的要求顺序,求出每一个要找祖先的人的祖先,格式:本人的名字+一个空格+祖先的名字+回车。 阅读详情

相关推荐

ybt1388:家谱(gen)

时间限制: 1000 ms 内存限制: 65536 KB 提交数: 3406 通过数: 1625 【题目描述】 现代的人对于本家族血统越来越感兴趣,现在给出充足的父子关系,请你编写程序找到某个人的最早的祖先。 【输入】 由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系由二行组成,用#name的形式描写一组父子关系中的父亲的名字,用+name的形式描写一组父子关系中的儿子的名字;接下来用?name的形式表示要求该人的最早的祖先;最后用单独的一个$表示文件结束...

youyi2008的博客 287

并查集 信息奥赛一本通 家谱(gen)

家谱(gen)时间限制: 1000 ms         内存限制: 65536 KB提交数: 227     通过数: 109 【题目描述】现代的人对于本家族血统越来越感兴趣,现在给出充足的父子关系,请你编写程序找到某个人的最早的祖先。【输入】由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系由二行组成,用#name的形式描写一组父子关系中的父亲的名字,用+name的形式描写一组父子...

pxlsdz的博客 1311

c++通过自然语言处理技术分析语音信号音高

其中,缓冲区大小为2048,最小基频为80Hz,最大基频为1000Hz。通常情况下,音高在85Hz到255Hz之间,因此可以根据实际情况修改最小和最大基频值。C++中可以使用数字信号处理库或语音处理库,比如MATLAB、Praat、YIN算法等等来进行音高分析。对于语音信号的音高分析,可以使用基频提取技术。基频是指一个声音周期的重复率,也就是一个声音波形中最长的周期。通常情况下,人的声音基频范围是85Hz到255Hz。这段代码使用了YIN算法来计算语音信号的基频,得出的结果即为音高。

SYC20110120的博客 1728

信息学奥赛一本通 1388:家谱(gen) | 洛谷 P2814 家谱

每输入一个名字,都先检查一下name2Num中是否有以该名字为键的键值对(即该名字是否出现过),如果之前没出现过,则为该名字分配一个新的编号。而后该名字对应的编号为。每个人都是用一个整数来表示的,那么就可以用树的双勤表示法(也就是并查集中的fa数组)来表示所有人之间的关系。模仿并查集中的查询操作,写出find函数,求x的祖先。保存的键值对为(名字,编号)。保存的键值对为(编号,名字),可以将编号转为名字。设置将名字与整数互相转换的映射。表示名字为x的人的父亲的名字。为编号为x的人的父亲的编号。

君义NOIP的博客 1607

YOLO详解

本文参考知乎 https://zhuanlan.zhihu.com/p/25236464 1. YOLO的创新点 YOLO将物体检测作为回归问题求解。基于一个单独的end-to-end网络,完成从原始图像的输入到物体位置和类别的输出。 从网络设计上,YOLO与two steps的目标检测方法如RCNN、Fast RCNN和Faster RCNN的区别如下: YOLO训练和检测均是在一个单独网...

UnknownPlayer的博客 9953

Keil MDK编译错误#541解决方案与ARM_Compiler包解析

在嵌入式开发中,编译器工具链的依赖管理是确保项目顺利构建的关键环节。以Keil MDK为例,其软件包依赖机制通过组件化设计实现功能解耦,其中ARM_Compiler包专门处理系统IO重定向等编译器扩展功能。这种架构既提升了模块复用性,也带来了版本兼容性挑战。当出现'Error #541: component missing'报错时,通常是由于中间件组件(如文件系统)在新版本中显式依赖了ARM_Compiler包。开发者需要通过Pack Installer安装该包,并在Run-Time Environment

weixin_32129187的博客 368

1388:家谱(gen)(并查集+字符串处理)

1388:家谱(gen)(并查集+字符串处理)

weq2011的博客 349

基于CNN对抗嵌入的图像隐写——CNN-Based Adversarial Embedding for Image Steganography

CNN-Based Adversarial Embedding for Image Steganography https://ieeexplore.ieee.org/abstract/document/8603808 这篇论文发表在TIFS( IEEE TRANSACTIONS ON INFORMATION FORENSICS AND SECURITY),TIFS是网络与信息安全领域的国际两大顶级期刊之一,中国计算机学会(CCF)推荐的A类期刊,SCI一区TOP期刊,目前影响因子有7多了。 1 概

weixin_48654804的博客 2279

家谱(gen)(信息学奥赛一本通- P1388)

【题目描述】现代的人对于本家族血统越来越感兴趣,现在给出充足的父子关系,请你编写程序找到某个人的最早的祖先。【输入】由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系由二行组成,用#name的形式描写一组父子关系中的父亲的名字,用+name的形式描写一组父子关系中的儿子的名字;接下来用?name的形式表示要求该人的最早的祖先;最后用单独的一个$表示文件结束。规定每个人的名字都有且只有6个字符,而且首字母大写,且没有任意两个人的名字相同。

布心老混子 所有代码均老混子本人远古手搓 易错点均为学生真实场景 博客文章部分借助ai生成 893

Android 14 (AOSP) 源码架构深度解析与开发者指南

Android14源码的仓库指南信息

保持专注,保持热爱 1186

基于YOLOv8的铁路轨道异物检测系统设计与实现

目标检测是计算机视觉领域的核心任务之一,旨在识别图像中特定目标的位置和类别。传统方法主要依赖手工特征(如HOG、SIFT等)和分类器(如SVM),而深度学习方法通过卷积神经网络自动学习特征表示,显著提升了检测性能。YOLO(You Only Look Once)系列算法作为单阶段目标检测的代表,以其高效的检测速度著称。YOLOv8是Ultralytics公司于2023年发布的最新版本,在精度和速度上都有进一步提升。

YOLO 574

信息学奥赛一本通 1388:家谱(gen) 第四章 图论

1388:家谱(gen)时间限制: 1000 ms 内存限制: 65536 KB提交数:6958 通过数: 3847【题目描述】现代的人对于本家族血统越来越感兴趣,现在给出充足的父子关系,请你编写程序找到某个人的最早的祖先。【输入】由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系由二行组成,用#name的形式描写一组父子关系中的父亲的名字,用+name的形式描写一组父子关系中的儿子的名字;接下来用?name的形式表示要求该人的最早的祖先;

长春高老师编程 348

AI奶牛TMR智能饲喂机器人 Qt信创完整项目( 统信/麒麟国产系统直接编译)

内置**犊牛、育成牛、围产牛、泌乳牛、干奶牛**5套标准化饲喂配方;+" 饲喂批次完成|牛群:"+grpText+"|投喂饲料:"+QString::number(ft)+"吨|剩料:"+QString::number(st)+"吨|异常牛:"+QString::number(abCow);cv::putText(frame,"霉变变质饲料禁止饲喂",cv::Point(20,40),cv::FONT_HERSHEY_SIMPLEX,0.7,cv::Scalar(0,0,255),2);

寒寒豆豆软件公司的博客 183

第三部分 数据结构 --第四章 图论算法1388:家谱(gen)

1388:家谱(gen) 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 2041 通过数: 1035 【题目描述】 现代的人对于本家族血统越来越感兴趣,现在给出充足的父子关系,请你编写程序找到某个人的最早的祖先。 【输入】 由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系由二行组成,用#name的形式描写一组父子关系中的父亲的名字,用+name的形式描写一组父子关系中的儿子的名字;接下来用?name的形式表示要求该人的最早的祖先;最后用单独的一个$

zqhf123的博客 840

【原创】关于西门子S120 的电气图纸设计

我们首先要了解一下模块的基本信息:SINAMICS 功率模块 PM240-2 三相交流380-480V+10/-10% 47-63Hz;至此,我们选择的驱动系统配置的资料都已经查找完毕,接下来就是根据每个部件的功能接口和我们需要实现的功能画出接线连接图,这样关于伺服电机控制,硬件部分设计就完成了。2)FSA - FSC 型功率模块 PM240-2 的屏蔽连接板外形尺寸图,所有数据以毫米(英寸)为单位。1)FSA 型功率模块 PM240-2 的外形尺寸图,所有数据以毫米(英寸)为单位。

Qinmingyue13的博客 2640

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

并查集——家谱gen

家谱gen Time Limit:1000MS Memory Limit:65536K Description   现在的人对于本家族血统越来越感兴趣,现在给出充足的父子关系,请你编写程序找到某个人最早的祖先。 Input 输入文件由多行组成 首先是一系列有关父子关系的描述,其中每一组父子关系由二行组成,用#name的形式描写一组父子关系中的父亲的名字,用+name的形...

weixin_30776863的博客 395

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

家谱(gen)——洛谷P2814

1 #include <iostream> 2 #include <string> 3 #include <map> 4 using namespace std; 5 map < string, string > mp; 6 int main() 7 { 8 string s1 = "...

weixin_30347009的博客 133

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

#并查集,哈希#洛谷 2814 SSL 2343 信息学奥赛一本通 1388 家谱

有了map,就很容易解决了。 题目 求两个人的关系 分析 并查集 代码 #include &amp;lt;iostream&amp;gt; #include &amp;lt;map&amp;gt; using namespace std; map&amp;lt;string,string&amp;gt;uk; string s; string getf(string u

lemondinosaur的博客 535

uva 1388 Graveyard

这道题要总共的雕像的移动距离最短,那么只需要把每一个雕像移动到离它最近的位置就行了,在解题之前需要证明两点: 1.排在最前面的雕像不用移动(这个是显然的) 2.两个雕像移动之后不可能在同一个位置(按照距离最短的原则移动每一个雕像,不可能出现两个雕像移动到同一个位置的情况),用反证法比较好证明, 只要两个雕像移动到了同一个位置,最后可以推导出的结果是,增加了 雕像的数量,平均距离反而增加了,这

皓首不倦 不负少年 855

1388 超级水题

描述 你选择今天来做题是幸运的……因为有个超级水题……给你2个字符串A,B。请输出在字符串A中出现了,而在字符串B中没有出现的字符的个数。样例:aaabb1输入 第一行包含一个整数T,表示有T组数据;以下每组数据包含两行,分别表示字符串A和B。输出 按照题目要求输出。样例输入 1

无知的我 1251
上一篇: J Mex 牛客
下一篇: 1389:亲戚
何处几年
博客等级 码龄8年 10粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值