LeetCode 2065. 最大化一张图中的路径价值
文章目錄
- 一、題目
- 1、題目描述
- 2、基礎框架
- 3、原題鏈接
- 二、解題報告
- 1、思路分析
- 2、時間復雜度
- 3、代碼詳解
- 三、本題小知識
- 四、加群須知
一、題目
1、題目描述
??給你一張無向圖,圖中有 nnn 個節點,節點編號從 000 到 n?1n - 1n?1。同時給你一個下標從 000 開始的整數數組 values,其中 values[i]是第 iii 個節點的 價值 。同時給你一個下標從 000 開始的二維整數數組 edges,其中 edges[j] = [uj, vj, timej]表示節點 uj和 vj之間有一條需要 timej秒才能通過的無向邊。最后,給你一個整數 maxTime。
??合法路徑 指的是圖中任意一條從節點 0 開始,最終回到節點 0 ,且花費的總時間 不超過 maxTime秒的一條路徑。你可以訪問一個節點任意次。一條合法路徑的 價值 定義為路徑中 不同節點 的價值 之和 (每個節點的價值 至多 算入價值總和中一次)。
??請你返回一條合法路徑的 最大 價值。每個節點 至多 有 四條 邊與之相連。
??樣例輸入: values = [0,32,10,43], edges = [[0,1,10],[1,2,15],[0,3,10]], maxTime = 49
??樣例輸出: 75
2、基礎框架
- C語言 版本給出的基礎框架代碼如下:
3、原題鏈接
LeetCode 2065. 最大化一張圖中的路徑價值
二、解題報告
1、思路分析
??(1)(1)(1) 首先,每個結點有可能訪問多次,這就不可能是最短路問題。所以排除廣度優先搜索。
??(2)(2)(2) 看數據范圍:10 <= timej, maxTime <= 100,說明最多只能訪問 10 條邊(10 = 100/10),所以我們直接利用深度優先搜索進行暴力枚舉,判斷可行即可。
??(3)(3)(3) 每個節點 至多 有 四條 邊與之相連,說明每次搜索擴展狀態最多四次,再一次印證了暴力搜索的可行性,也就是 4104^{10}410。
2、時間復雜度
?? 最壞時間復雜度 O(410)O(4^{10})O(410) 。
3、代碼詳解
#define maxn 1010typedef struct {int v;int time; }Edge;Edge E[maxn][10]; int EdgeSize[maxn]; int visited[maxn];void addEdge(int u, int v, int time) {E[u][ EdgeSize[u] ].v = v;E[u][ EdgeSize[u] ].time = time;++EdgeSize[u]; }void dfs(int* values, int n, int u, int value, int remainTime, int *ans) {int i;if(remainTime < 0) {return ;}if(u == 0) {if(value > *ans) {*ans = value;}}for(i = 0; i < EdgeSize[u]; ++i) {int v = E[u][i].v;int time = E[u][i].time;if(visited[v]) {dfs(values, n, v, value, remainTime - time, ans);}else {visited[v] = 1;dfs(values, n, v, value + values[v], remainTime - time, ans);visited[v] = 0;}} }int maximalPathQuality(int* values, int n, int** edges, int edgesSize, int* edgesColSize, int maxTime){int i;int ret = 0;for(i = 0; i < n; ++i) {EdgeSize[i] = 0;visited[i] = 0;}for(i = 0; i < edgesSize; ++i) {addEdge( edges[i][0], edges[i][1], edges[i][2] );addEdge( edges[i][1], edges[i][0], edges[i][2] );}visited[0] = 1;dfs(values, n, 0, values[0], maxTime, &ret);return ret; }三、本題小知識
??當一個問題沒有任何思路的時候,我們可以嘗試去看下數據范圍,看看能不能找到一些心得思路。
四、加群須知
??相信看我文章的大多數都是「 大學生 」,能上大學的都是「 精英 」,那么我們自然要「 精益求精 」,如果你還是「 大一 」,那么太好了,你擁有大把時間,當然你可以選擇「 刷劇 」,然而,「 學好算法 」,三年后的你自然「 不能同日而語 」。
??那么這里,我整理了「 幾十個基礎算法 」 的分類,點擊開啟:
??如果鏈接被屏蔽,或者有權限問題,可以私聊作者解決。
??大致題集一覽:
??為了讓這件事情變得有趣,以及「 照顧初學者 」,目前題目只開放最簡單的算法 「 枚舉系列 」 (包括:線性枚舉、雙指針、前綴和、二分枚舉、三分枚舉),當有 一半成員刷完 「 枚舉系列 」 的所有題以后,會開放下個章節,等這套題全部刷完,你還在群里,那么你就會成為「 夜深人靜寫算法 」專家團 的一員。
??不要小看這個專家團,三年之后,你將會是別人 望塵莫及 的存在。如果要加入,可以聯系我,考慮到大家都是學生, 沒有「 主要經濟來源 」,在你成為神的路上,「 不會索取任何 」。
??🔥聯系作者,或者掃作者主頁二維碼加群,加入刷題行列吧🔥
🔥讓天下沒有難學的算法🔥
C語言免費動漫教程,和我一起打卡! 🌞《光天化日學C語言》🌞
讓你養成九天持續刷題的習慣 🔥《九日集訓》🔥
入門級C語言真題匯總 🧡《C語言入門100例》🧡
組團學習,抱團生長 🌌《算法零基礎100講》🌌
幾張動圖學會一種數據結構 🌳《畫解數據結構》🌳
競賽選手金典圖文教程 💜《夜深人靜寫算法》💜
總結
以上是生活随笔為你收集整理的LeetCode 2065. 最大化一张图中的路径价值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黑客攻防专题九:菜鸟 Sa 注入=肉鸡
- 下一篇: 磁带驱动器工作环境