diff --git a/solution/2000-2099/2065.Maximum Path Quality of a Graph/README.md b/solution/2000-2099/2065.Maximum Path Quality of a Graph/README.md index 6c5141bd4a7ad..2c2d418b2fb15 100644 --- a/solution/2000-2099/2065.Maximum Path Quality of a Graph/README.md +++ b/solution/2000-2099/2065.Maximum Path Quality of a Graph/README.md @@ -84,6 +84,8 @@ +DFS + ### **Python3** @@ -102,6 +104,46 @@ ``` +### **TypeScript** + +```ts +function maximalPathQuality(values: number[], edges: number[][], maxTime: number): number { + const n = values.length; + let g: Array>> = Array.from({ length: n }, v => new Array()); + for (let edge of edges) { + let [u, v, t] = edge; + g[u].push([v, t]); + g[v].push([u, t]); + } + let visited = new Array(n).fill(false); + let ans = 0; + + function dfs(u: number, time: number, value: number): void { + // 索引0为终点 + if (!u) { + ans = Math.max(value, ans); + } + for (let [v, dist] of g[u]) { + if (time - dist >= 0) { + if (!visited[v]) { + visited[v] = true; + dfs(v, time - dist, value + values[v]); + visited[v] = false; // 回溯 + } else { + dfs(v, time - dist, value); + } + } + } + } + + // 索引0为起点 + visited[0] = true; + dfs(0, maxTime, values[0]); + + return ans; +}; +``` + ### **...** ``` diff --git a/solution/2000-2099/2065.Maximum Path Quality of a Graph/README_EN.md b/solution/2000-2099/2065.Maximum Path Quality of a Graph/README_EN.md index 576ef8bd649e8..5e4ef29a91fc2 100644 --- a/solution/2000-2099/2065.Maximum Path Quality of a Graph/README_EN.md +++ b/solution/2000-2099/2065.Maximum Path Quality of a Graph/README_EN.md @@ -86,6 +86,46 @@ The only node visited is 0, giving a maximal path quality of 0. ``` +### **TypeScript** + +```ts +function maximalPathQuality(values: number[], edges: number[][], maxTime: number): number { + const n = values.length; + let g: Array>> = Array.from({ length: n }, v => new Array()); + for (let edge of edges) { + let [u, v, t] = edge; + g[u].push([v, t]); + g[v].push([u, t]); + } + let visited = new Array(n).fill(false); + let ans = 0; + + function dfs(u: number, time: number, value: number): void { + // 索引0为终点 + if (!u) { + ans = Math.max(value, ans); + } + for (let [v, dist] of g[u]) { + if (time - dist >= 0) { + if (!visited[v]) { + visited[v] = true; + dfs(v, time - dist, value + values[v]); + visited[v] = false; // 回溯 + } else { + dfs(v, time - dist, value); + } + } + } + } + + // 索引0为起点 + visited[0] = true; + dfs(0, maxTime, values[0]); + + return ans; +}; +``` + ### **...** ``` diff --git a/solution/2000-2099/2065.Maximum Path Quality of a Graph/Solution.ts b/solution/2000-2099/2065.Maximum Path Quality of a Graph/Solution.ts new file mode 100644 index 0000000000000..6d2cd436f1d0d --- /dev/null +++ b/solution/2000-2099/2065.Maximum Path Quality of a Graph/Solution.ts @@ -0,0 +1,35 @@ +function maximalPathQuality(values: number[], edges: number[][], maxTime: number): number { + const n = values.length; + let g: Array>> = Array.from({ length: n }, v => new Array()); + for (let edge of edges) { + let [u, v, t] = edge; + g[u].push([v, t]); + g[v].push([u, t]); + } + let visited = new Array(n).fill(false); + let ans = 0; + + function dfs(u: number, time: number, value: number): void { + // 索引0为终点 + if (!u) { + ans = Math.max(value, ans); + } + for (let [v, dist] of g[u]) { + if (time - dist >= 0) { + if (!visited[v]) { + visited[v] = true; + dfs(v, time - dist, value + values[v]); + visited[v] = false; // 回溯 + } else { + dfs(v, time - dist, value); + } + } + } + } + + // 索引0为起点 + visited[0] = true; + dfs(0, maxTime, values[0]); + + return ans; +}; \ No newline at end of file