orangc/walls-catppuccin-mocha
231 words
1 minutes
UVA 12442 - Forwarding Emails
在火星人中,每個火星人收到轉發郵件時,都會只轉發給一個指定的人(且不能轉給自己)。現在,族長想親自寄出一封郵件,他想知道應該寄給哪一位火星人,才能讓看到郵件的人數最多。每個人之後按照固定的轉發規則傳遞下去。
分析
題目說要找出給哪個節點,traverse 的節點數量會最多。根據題目給的輸入測資,每一個 case 都可以拿到一個 adjacency list。因此我的初步想法是用 dfs traverse 在 list 裡面的每一個節點,找出最大節點數的那個節點。
int dfs(int u) {
if (visited[u]) return 0;
visited[u] = true;
return 1 + dfs(graph[u]);
}
送出後結果 TLE,透過 DFS 記憶化改善程式效能。
int dfs(int u) {
if (visited[u]) return 0;
visited[u] = true;
return dp[u] = 1 + dfs(graph[u]);
}
UVA 12442 - Forwarding Emails
https://blog.yuto0226.dev/posts/uva-12442-forwarding-emails/