輸入格式:
輸入首先在第一行給出乙個正整數 n(1隨後一行給出正整數 m,為查詢數量。隨後 m 行,每行給出一對人名,格式為:名1 姓1 名2 姓2。注意:這裡的姓是不帶字尾的。四個字串均由不超過 20 個小寫的英文本母組成。
題目保證不存在兩個人是同名的。
輸出格式:
對每乙個查詢,根據結果在一行內顯示以下資訊:
若兩人為異性,且五代以內無公共祖先,則輸出 yes;
若兩人為異性,但五代以內(不包括第五代)有公共祖先,則輸出 no;
若兩人為同性,則輸出 whatever;
若有一人不在名單內,則輸出 na。
所謂「五代以內無公共祖先」是指兩人的公共祖先(如果存在的話)必須比任何一方的曾祖父輩分高。
輸入樣例:
15chris smithm
adam smithm
bob adamsson
jack chrissson
bill chrissson
mike jacksson
steve billsson
tim mikesson
april mikesdottir
eric stevesson
tracy timsdottir
james ericsson
patrick jacksson
robin patricksson
will robinsson
6tracy tim james eric
will robin tracy tim
april mike steve bill
bob adam eric steve
tracy tim tracy tim
x man april mikes
輸出樣例:
yesno
nowhatever
whatever
na
#include
#include
#include
#include
#include
using
namespace std;
struct node
;mapm;
intcheck
(string s1,string s2)}}
return1;
//根本沒有公共祖先
}int
main()
else
if(s2[len-1]
=='r')}
cin>>t;
while
(t--
)else
if(m[s1]
.***==m[s2]
.***)
else
}return0;
}
L2 030 冰島人 25分
2018年世界盃,冰島隊因1 1平了強大的阿根廷隊而一戰成名。好事者發現冰島人的名字後面似乎都有個 松 son 於是有科普如下 輸入首先在第一行給出乙個正整數 n 1隨後一行給出正整數 m,為查詢數量。隨後 m 行,每行給出一對人名,格式為 名1 姓1 名2 姓2。注意 這裡的姓是不帶字尾的。四個字...
天梯賽 L2 030 冰島人
題意 給你n個人的姓名,他們組成了若干個家族,再給出m個詢問,每次詢問給出兩個人的姓名,問他們能否交往,只要最近公共祖先必須與任何乙個人相隔超過5代才能交往。思路 對每個人的名字進行編號,然後把字尾給去掉,根據名和姓建立若干棵家族樹,再用乙個節點把這若干棵樹給連成一顆樹,找最近公共祖先,特判一下0號...
L2 2 冰島人 (25 分
2018年世界盃,冰島隊因1 1平了強大的阿根廷隊而一戰成名。好事者發現冰島人的名字後面似乎都有個 松 son 於是有科普如下 輸入首先在第一行給出乙個正整數 n 1隨後一行給出正整數 m,為查詢數量。隨後 m 行,每行給出一對人名,格式為 名1 姓1 名2 姓2。注意 這裡的姓是不帶字尾的。四個字...