題目
問題描述
大所在的幽寂即將與皇家鎢冀進行一場足球友誼賽。與一般的足球比賽人制不同,這場友誼賽兩隊各有位球員同時在場上奔跑,場面十分壯 (hun)觀(luan)。當然,球還是隻有一個。
現在,幽寂主教練卡犇要制定戰術。在進攻上,爲了保證團隊的協調有序,(直接)傳球必須在特定球員之間進行,方向不限。例如門將只會與最近的幾個後衛傳球。
受到個人能力和球員間默契的影響, 可直接傳球的兩個球員之間有一個特定的失誤係數,越大則表示越容易失誤。
不可直接傳球的兩個球員之間想要進行球的傳遞,則需通過其他球員來間接傳球(戰術已保證一個球員能直接或間接傳給其他任意球員) 。可直接傳球球員之間也可以間接傳球。
根據木桶原理,間接傳球的失誤係數等於傳球路線中所有直接傳球的最大的失誤係數。
在制定高級戰術過程中,卡犇需要知道兩名球員間傳球(包括直接和間接)可能達到的最小的失誤係數是多少。然而由於球員太多……
輸入輸出格式
輸入格式
第一行兩個正整數,分別表示幽寂隊場上球員數和可直接傳球的球員有多少對。
接下來行,每行一個字符串,分別表示每位球員姓名。
接下來行,每行兩個字符串和一個正整數,之間用一空格隔開,
表示名爲和名爲的兩個球員可以直接傳球,失誤係數爲。
第行一個正整數,表示卡犇的詢問數。
接下來行,每行兩個字符串,表示卡犇想知道名爲和名爲的兩個球員之間傳球可達的最小失誤係數。
數據沒有多餘的空格和回車。
輸出格式
共行,每行一個正整數,依次表示每個詢問的答案。
數據範圍與約定
對於的數據,;
對於的數據,;
對於的數據,;
對於的數據,,失誤係數,球員名字互不相同且長度不超過個字符。
思路
發現 任意兩個人之間的失誤係數一定是某個直接傳球的失誤係數,那麼就可以“枚舉”——將第大的直接傳球失誤係數叫做,那麼兩個球員傳球,失誤係數爲,當且僅當:
邊集是時不連通;
邊集是時連通。
那麼將邊排個序處理就好了!用並查集檢查。是不是很像?就建一個樹就好了!然後找就是板題了。
代碼
#include <cstdio>
int main(){
printf("Reader orz or2 orz");
printf("\n 聽了這麼多,代碼要自己寫 \n");
return 0;
}