【PTA-天梯賽訓練】願天下有情人都是失散多年的兄妹

来源:https://www.cnblogs.com/kannyi/archive/2018/03/15/8576899.html
-Advertisement-
Play Games

呵呵。大家都知道五服以內不得通婚,即兩個人最近的共同祖先如果在五代以內(即本人、父母、祖父母、曾祖父母、高祖父母)則不可通婚。本題就請你幫助一對有情人判斷一下,他們究竟是否可以成婚? 輸入格式: 輸入第一行給出一個正整數N(2 ≤ N ≤),隨後N行,每行按以下格式給出一個人的信息: 其中ID是5位 ...


呵呵。大家都知道五服以內不得通婚,即兩個人最近的共同祖先如果在五代以內(即本人、父母、祖父母、曾祖父母、高祖父母)則不可通婚。本題就請你幫助一對有情人判斷一下,他們究竟是否可以成婚?

輸入格式:

輸入第一行給出一個正整數N(2 ≤ N ≤),隨後N行,每行按以下格式給出一個人的信息:

本人ID 性別 父親ID 母親ID

其中ID是5位數字,每人不同;性別M代表男性、F代表女性。如果某人的父親或母親已經不可考,則相應的ID位置上標記為-1

接下來給出一個正整數K,隨後K行,每行給出一對有情人的ID,其間以空格分隔。

註意:題目保證兩個人是同輩,每人只有一個性別,並且血緣關係網中沒有亂倫或隔輩成婚的情況。

輸出格式:

對每一對有情人,判斷他們的關係是否可以通婚:如果兩人是同性,輸出Never Mind;如果是異性並且關係出了五服,輸出Yes;如果異性關係未出五服,輸出No

輸入樣例:

24
00001 M 01111 -1
00002 F 02222 03333
00003 M 02222 03333
00004 F 04444 03333
00005 M 04444 05555
00006 F 04444 05555
00007 F 06666 07777
00008 M 06666 07777
00009 M 00001 00002
00010 M 00003 00006
00011 F 00005 00007
00012 F 00008 08888
00013 F 00009 00011
00014 M 00010 09999
00015 M 00010 09999
00016 M 10000 00012
00017 F -1 00012
00018 F 11000 00013
00019 F 11100 00018
00020 F 00015 11110
00021 M 11100 00020
00022 M 00016 -1
00023 M 10012 00017
00024 M 00022 10013
9
00021 00024
00019 00024
00011 00012
00022 00018
00001 00004
00013 00016
00017 00015
00019 00021
00010 00011

輸出樣例:

Never Mind
Yes
Never Mind
No
Yes
No
Yes
No
No

思路:兩個dfs函數,先搜第一個人的五代親屬並標記,再找另一個的五代親屬是否與其重覆。

#include<bits/stdc++.h>
using namespace std;
int vis[100005],f;
struct peo
{
    int fu,mu;
    char sex;
    peo():fu(-1),mu(-1){}    //結構體初始化,一定要先將父母的值都賦值為-1,不然會遞歸到id為0的地方,發生錯誤!!
}a[100005];
int dfs(int x,int y)         //先找出第一個人的五代親屬 
{
    if(y>5)
        return 0;
    vis[x]=1;                //親屬位置標記為1 
    if(a[x].fu!=-1)
        dfs(a[x].fu,y+1);
    if(a[x].mu!=-1)
        dfs(a[x].mu,y+1);
} 
int dfss(int x,int y)        //再找出第二個人的五代親屬 
{
    if(y>5)
        return 0;
    if(vis[x]==0)
    {
        if(a[x].fu!=-1)
            dfss(a[x].fu,y+1);
        if(a[x].mu!=-1)
            dfss(a[x].mu,y+1);
    }
    else 
    {
        f=1;                 //如果訪問過,標記為1,跳出
        return 0;
    }
}
int main()
{
    int i,x,y,k,id,fu,mu,n;
    char sex;
    cin>>n;
    for(i=1;i<=n;i++)
    {
        scanf("%d %c %d %d",&id,&sex,&fu,&mu);
        a[id].fu=fu;
        a[id].mu=mu;
        a[id].sex=sex;
        a[fu].sex='M';        //一定要給父母的性別賦值!!!!
        a[mu].sex='F';
    }
    cin>>k;
    while(k--)
    {
        scanf("%d%d",&x,&y);
        if(a[x].sex==a[y].sex)
        {
            printf("Never Mind\n");
        }
        else 
        {
            memset(vis,0,sizeof(vis));
            f=0;
            dfs(x,1);
            dfss(y,1);
            
            if(f==1)
            printf("No\n");
            else printf("Yes\n");
        }
    }
    return 0;
}


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • While 迴圈語句 用於迴圈執行程式,即在某條件下,迴圈執行某段程式,以處理需要重覆處理的相同任務。 語法: 執行語句可以是單個語句或語句塊。判斷條件可以是任何表達式,任何非零、或非空(null)的值均為true。 當判斷條件假false時,迴圈結束。 示例:for迴圈實現猜字游戲 while 實 ...
  • 1. 字元串中必須僅有P, A, T這三種字元,不可以包含其它字元; 2. 任意形如 xPATx 的字元串都可以獲得“答案正確”,其中 x 或者是空字元串,或者是僅由字母 A 組成的字元串; 3. 如果 aPbTc 是正確的,那麼 aPbATca 也是正確的,其中 a, b, c 均或者是空字元串, ...
  • java.lang.IllegalArgumentExceptionat org.springframework.asm.ClassReader.<init>(Unknown Source)at org.springframework.asm.ClassReader.<init>(Unknown S ...
  • 練習 ...
  • 1.使用字元串來存儲文本; 2.在程式中顯示字元串; 3.在字元串中包含特殊的字元; 4.拼接字元串; 5.在字元串中包含變數; 6.比較字元串; 7.判斷字元串的長度; 程式Credits:顯示一部電影的導演和演員名單 1 package com.jsample; 2 3 public class ...
  • 網上有太多的VHDL和verilog比較的文章,基本上說的都是VHDL和verilog之間可以實現同一級別的描述,包括模擬級、寄存器傳輸級、電路級,所以可以認為兩者是等同級別的語言。很多時候會了其中一個,當然前提是真的學會,知道rtl(寄存器傳輸級)的意義,知道rtl與電路如何對應,在此基礎上,則很 ...
  • For 迴圈語句 基礎知識 for迴圈可以遍歷任何序列的項目,如一個列表或者一個字元串。 語法: for 迴圈規則: do sth 判斷對象是否可迭代 zip() 函數 函數用於將可迭代的對象作為參數,將對象中對應的元素打包成一個個元組,然後返回由這些元組組成的列表。 如果各個迭代器的元素個數不一致 ...
  • 1.一些簡單的dos命令: – d: 回車 盤符切換 – dir(directory):列出當前目錄下的文件以及文件夾 – del:刪除文件 – md:創建文件夾 – rd:刪除文件夾 – cd (change directory)改變指定目錄(進入指定目錄) 進入 cd 目錄;cd 多級目錄 回退 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...