喊山,是人雙手圍在嘴邊成喇叭狀,對著遠方高山發出「喂—喂喂—喂喂喂……」的呼喚。呼喚聲通過空氣的傳遞,迴盪於深谷之間,傳送到人們耳中,發出約定俗成的「訊號」,達到聲訊傳遞交流的目的。原來它是彝族先民用來求援呼救的「訊號」,慢慢地人們在生活實踐中發現了它的實用價值,便把它作為一種交流工具世代傳襲使用。(**摘自:
乙個山頭呼喊的聲音可以被臨近的山頭同時聽到。題目假設每個山頭最多有兩個能聽到它的臨近山頭。給定任意乙個發出原始訊號的山頭,本題請你找出這個訊號最遠能傳達到的地方。
輸入第一行給出3個正整數n、m和k,其中n(≤10000)是總的山頭數(於是假設每個山頭從1到n編號)。接下來的m行,每行給出2個不超過n的正整數,數字間用空格分開,分別代表可以聽到彼此的兩個山頭的編號。這裡保證每一對山頭只被輸入一次,不會有重複的關係輸入。最後一行給出k(≤10)個不超過n的正整數,數字間用空格分開,代表需要查詢的山頭的編號。
依次對於輸入中的每個被查詢的山頭,在一行中輸出其發出的呼喊能夠連鎖傳達到的最遠的那個山頭。注意:被輸出的首先必須是被查詢的個山頭能連鎖傳到的。若這樣的山頭不只乙個,則輸出編號最小的那個。若此山頭的呼喊無法傳到任何其他山頭,則輸出0。
7 5 4
1 22 3
3 14 5
5 61 4 5 726
40鏈式前向星建圖之後對於每個詢問直接bfs搜
#include using namespace std;
const int maxn = 1e5 + 7;
#define inf 0x3f3f3f3f
int ans;
struct edge
} e[maxn << 1];
int cnt = -1;
int head[maxn];
int vis[maxn];
void add(int u, int v)
int maxx, maxlen;
struct node
};void bfs(int x)
else if (l.len == maxlen)
maxx = min(maxx, l.num);
q.push(l);}}
}}int main()
while (k--)
return 0;
}
喊山 30分 BFS 結構體陣列模擬鄰接表
乙個山頭呼喊的聲音可以被臨近的山頭同時聽到。題目假設每個山頭最多有兩個能聽到它的臨近山頭。給定任意乙個發出原始訊號的山頭,本題請你找出這個訊號最遠能傳達到的地方。輸入格式 輸入第一行給出3個正整數n m和k,其中n 10000 是總的山頭數 於是假設每個山頭從1到n編號 接下來的m行,每行給出2個不...
PTA 森森快遞 (30 分)
7 14 森森快遞 30 分 森森開了一家快遞公司,叫森森快遞。因為公司剛剛開張,所以業務路線很簡單,可以認為是一條直線上的n個城市,這些城市從左到右依次從0到 n 1 編號。由於道路限制,第i號城市 i 0,n 2 與第 i 1 號城市中間往返的運輸貨物重量在同一時刻不能超過c i 公斤。公司開張...
PTA 目錄樹 (30 分)
7 14 目錄樹 30 分 在zip歸檔檔案中,保留著所有壓縮檔案和目錄的相對路徑和名稱。當使用winzip等gui軟體開啟zip歸檔檔案時,可以從這些資訊中重建目錄的樹狀結構。請編寫程式實現目錄的樹狀結構的重建工作。輸入格式 輸入首先給出正整數n 10 4 表示zip歸檔檔案中的檔案和目錄的數量。...