生活随笔
收集整理的這篇文章主要介紹了
LeetCode 2065. 最大化一张图中的路径价值(DFS)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
1. 題目
給你一張 無(wú)向 圖,圖中有 n 個(gè)節(jié)點(diǎn),節(jié)點(diǎn)編號(hào)從 0 到 n - 1 (都包括)。
同時(shí)給你一個(gè)下標(biāo)從 0 開始的整數(shù)數(shù)組 values ,其中 values[i] 是第 i 個(gè)節(jié)點(diǎn)的 價(jià)值 。同時(shí)給你一個(gè)下標(biāo)從 0 開始的二維整數(shù)數(shù)組 edges ,其中 edges[j] = [uj, vj, timej] 表示節(jié)點(diǎn) uj 和 vj 之間有一條需要 timej 秒才能通過(guò)的無(wú)向邊。最后,給你一個(gè)整數(shù) maxTime 。
合法路徑 指的是圖中任意一條從節(jié)點(diǎn) 0 開始,最終回到節(jié)點(diǎn) 0 ,且花費(fèi)的總時(shí)間 不超過(guò) maxTime 秒的一條路徑。
你可以訪問(wèn)一個(gè)節(jié)點(diǎn)任意次。
一條合法路徑的 價(jià)值 定義為路徑中 不同節(jié)點(diǎn) 的價(jià)值 之和 (每個(gè)節(jié)點(diǎn)的價(jià)值 至多 算入價(jià)值總和中一次)。
請(qǐng)你返回一條合法路徑的 最大 價(jià)值。
注意:每個(gè)節(jié)點(diǎn) 至多 有 四條 邊與之相連。
示例 1:
輸入:values
= [0,32,10,43],
edges
= [[0,1,10],[1,2,15],[0,3,10]], maxTime
= 49
輸出:
75
解釋:
一條可能的路徑為:
0 -> 1 -> 0 -> 3 -> 0 。
總花費(fèi)時(shí)間為
10 + 10 + 10 + 10 = 40 <= 49 。
訪問(wèn)過(guò)的節(jié)點(diǎn)為
0 ,
1 和
3 ,最大路徑價(jià)值為
0 + 32 + 43 = 75 。
示例 2:
輸入:values
= [5,10,15,20],
edges
= [[0,1,10],[1,2,10],[0,3,10]], maxTime
= 30
輸出:
25
解釋:
一條可能的路徑為:
0 -> 3 -> 0 。
總花費(fèi)時(shí)間為
10 + 10 = 20 <= 30 。
訪問(wèn)過(guò)的節(jié)點(diǎn)為
0 和
3 ,最大路徑價(jià)值為
5 + 20 = 25 。
示例 3:
輸入:values
= [1,2,3,4],
edges
= [[0,1,10],[1,2,11],[2,3,12],[1,3,13]], maxTime
= 50
輸出:
7
解釋:
一條可能的路徑為:
0 -> 1 -> 3 -> 1 -> 0 。總花費(fèi)時(shí)間為
10 + 13 + 13 + 10 = 46 <= 50 。
訪問(wèn)過(guò)的節(jié)點(diǎn)為
0 ,
1 和
3 ,最大路徑價(jià)值為
1 + 2 + 4 = 7 。
示例 4:
輸入:values
= [0,1,2],
edges
= [[1,2,10]], maxTime
= 10
輸出:
0
解釋:
唯一一條路徑為
0 ??偦ㄙM(fèi)時(shí)間為
0 。
唯一訪問(wèn)過(guò)的節(jié)點(diǎn)為
0 ,最大路徑價(jià)值為
0 。提示:
n
== values
.length
1 <= n
<= 1000
0 <= values
[i
] <= 10^8
0 <= edges
.length
<= 2000
edges
[j
].length
== 3
0 <= uj
< vj
<= n
- 1
10 <= timej
, maxTime
<= 100
[uj
, vj
] 所有節(jié)點(diǎn)對(duì) 互不相同 。
每個(gè)節(jié)點(diǎn) 至多有四條 邊。
圖可能不連通。
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/maximum-path-quality-of-a-graph
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
2. 解題
- 看見條件 10 <= timej, maxTime <= 100,最多 dfs 10 層就完事了
- 建圖,暴力搜索就是了
class Solution {int maxVal
= 0;
public:int maximalPathQuality(vector
<int>& values
, vector
<vector
<int>>& edges
, int maxTime
) {int n
= values
.size();vector
<unordered_map
<int,int>> g(n
);vector
<int> vis(n
);for(auto& e
: edges
){ g
[e
[0]][e
[1]] = e
[2];g
[e
[1]][e
[0]] = e
[2];}vis
[0] = 1; dfs(g
, values
, maxTime
, vis
, 0, 0, values
[0]);return maxVal
;}void dfs(vector
<unordered_map
<int,int>>& g
, vector
<int>& values
, int maxTime
, vector
<int>& vis
, int idx
, int time
, int val
){if(time
> maxTime
) return; if(idx
==0 && val
> maxVal
){maxVal
= val
;}for(auto& nid_t
: g
[idx
]){ int nid
= nid_t
.first
; int t
= nid_t
.second
; if(vis
[nid
] == 0) {vis
[nid
]++;dfs(g
, values
, maxTime
, vis
, nid
, time
+t
, val
+values
[nid
]);vis
[nid
]--;}else {vis
[nid
]++;dfs(g
, values
, maxTime
, vis
, nid
, time
+t
, val
);vis
[nid
]--;}}}
};
404 ms 23.6 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
長(zhǎng)按或掃碼關(guān)注我的公眾號(hào)(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!
總結(jié)
以上是生活随笔為你收集整理的LeetCode 2065. 最大化一张图中的路径价值(DFS)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。