天梯賽 L2 030 冰島人

2021-09-16 21:55:30 字數 750 閱讀 6724

題意:給你n個人的姓名,他們組成了若干個家族,再給出m個詢問,每次詢問給出兩個人的姓名,問他們能否交往,只要最近公共祖先必須與任何乙個人相隔超過5代才能交往。

思路:對每個人的名字進行編號,然後把字尾給去掉,根據名和姓建立若干棵家族樹,再用乙個節點把這若干棵樹給連成一顆樹,找最近公共祖先,特判一下0號節點就行了。

**:

#includeusing namespace std;

#define inf 0x3f3f3f3f

const int maxn=1e6+9;

struct nodeedge[maxn];

int head[maxn],cnt=0,d[maxn],p[maxn][30],flag[maxn],n;

void add(int u,int v)

void dfs(int u)

}void init()

struct node;

vectorvec;

vectorrt;

mapmp;

int main());

mp[s1]=i;

}int len=vec.size();

for(i=0;i>m;

for(i=1;i<=m;i++)

else if(flag[mp[s1]]==flag[mp[s2]])

else

else}}

//for(int i=1;i<=15;i++)cout

L2 030 冰島人 25分

輸入格式 輸入首先在第一行給出乙個正整數 n 1隨後一行給出正整數 m,為查詢數量。隨後 m 行,每行給出一對人名,格式為 名1 姓1 名2 姓2。注意 這裡的姓是不帶字尾的。四個字串均由不超過 20 個小寫的英文本母組成。題目保證不存在兩個人是同名的。輸出格式 對每乙個查詢,根據結果在一行內顯示以...

L2 030 冰島人 25分

2018年世界盃,冰島隊因1 1平了強大的阿根廷隊而一戰成名。好事者發現冰島人的名字後面似乎都有個 松 son 於是有科普如下 輸入首先在第一行給出乙個正整數 n 1隨後一行給出正整數 m,為查詢數量。隨後 m 行,每行給出一對人名,格式為 名1 姓1 名2 姓2。注意 這裡的姓是不帶字尾的。四個字...

2023年天梯賽 校內選拔賽 7 12 冰島人

對每乙個查詢,根據結果在一行內顯示以下資訊 若兩人為異性,且五代以內無公共祖先,則輸出 yes 若兩人為異性,但五代以內 不包括第五代 有公共祖先,則輸出 no 若兩人為同性,則輸出 whatever 若有一人不在名單內,則輸出 na。所謂 五代以內無公共祖先 是指兩人的公共祖先 如果存在的話 必須...