題意:給你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/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。所謂 五代以內無公共祖先 是指兩人的公共祖先 如果存在的話 必須...