Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit df12304

Browse files
feat: add solutions to lc problem: No.3313 (doocs#3626)
No.3313.Find the Last Marked Nodes in Tree
1 parent 5a549bf commit df12304

File tree

4 files changed

+127
-18
lines changed

4 files changed

+127
-18
lines changed

‎solution/3300-3399/3313.Find the Last Marked Nodes in Tree/README.md‎

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -216,17 +216,13 @@ public:
216216
g[u].push_back(v);
217217
g[v].push_back(u);
218218
}
219-
auto max_node = [&](const vector<int>& dist) {
220-
int mx = ranges::max(dist);
221-
return ranges::find(dist, mx) - dist.begin();
222-
};
223219
vector<int> dist1(n);
224220
dfs(0, -1, dist1);
225-
int a = max_node(dist1);
221+
int a = max_element(dist1.begin(), dist1.end()) - dist1.begin();
226222

227223
vector<int> dist2(n);
228224
dfs(a, -1, dist2);
229-
int b = max_node(dist2);
225+
int b = max_element(dist2.begin(), dist2.end()) - dist2.begin();
230226

231227
vector<int> dist3(n);
232228
dfs(b, -1, dist3);
@@ -342,6 +338,48 @@ function lastMarkedNodes(edges: number[][]): number[] {
342338
}
343339
```
344340

341+
#### JavaScript
342+
343+
```js
344+
/**
345+
* @param {number[][]} edges
346+
* @return {number[]}
347+
*/
348+
var lastMarkedNodes = function (edges) {
349+
const n = edges.length + 1;
350+
const g = Array.from({ length: n }, () => []);
351+
for (const [u, v] of edges) {
352+
g[u].push(v);
353+
g[v].push(u);
354+
}
355+
const dfs = (i, fa, dist) => {
356+
for (const j of g[i]) {
357+
if (j !== fa) {
358+
dist[j] = dist[i] + 1;
359+
dfs(j, i, dist);
360+
}
361+
}
362+
};
363+
364+
const dist1 = Array(n).fill(0);
365+
dfs(0, -1, dist1);
366+
const a = dist1.indexOf(Math.max(...dist1));
367+
368+
const dist2 = Array(n).fill(0);
369+
dfs(a, -1, dist2);
370+
const b = dist2.indexOf(Math.max(...dist2));
371+
372+
const dist3 = Array(n).fill(0);
373+
dfs(b, -1, dist3);
374+
375+
const ans = [];
376+
for (let i = 0; i < n; ++i) {
377+
ans.push(dist2[i] > dist3[i] ? a : b);
378+
}
379+
return ans;
380+
};
381+
```
382+
345383
<!-- tabs:end -->
346384

347385
<!-- solution:end -->

‎solution/3300-3399/3313.Find the Last Marked Nodes in Tree/README_EN.md‎

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -216,17 +216,13 @@ public:
216216
g[u].push_back(v);
217217
g[v].push_back(u);
218218
}
219-
auto max_node = [&](const vector<int>& dist) {
220-
int mx = ranges::max(dist);
221-
return ranges::find(dist, mx) - dist.begin();
222-
};
223219
vector<int> dist1(n);
224220
dfs(0, -1, dist1);
225-
int a = max_node(dist1);
221+
int a = max_element(dist1.begin(), dist1.end()) - dist1.begin();
226222

227223
vector<int> dist2(n);
228224
dfs(a, -1, dist2);
229-
int b = max_node(dist2);
225+
int b = max_element(dist2.begin(), dist2.end()) - dist2.begin();
230226

231227
vector<int> dist3(n);
232228
dfs(b, -1, dist3);
@@ -342,6 +338,48 @@ function lastMarkedNodes(edges: number[][]): number[] {
342338
}
343339
```
344340

341+
#### JavaScript
342+
343+
```js
344+
/**
345+
* @param {number[][]} edges
346+
* @return {number[]}
347+
*/
348+
var lastMarkedNodes = function (edges) {
349+
const n = edges.length + 1;
350+
const g = Array.from({ length: n }, () => []);
351+
for (const [u, v] of edges) {
352+
g[u].push(v);
353+
g[v].push(u);
354+
}
355+
const dfs = (i, fa, dist) => {
356+
for (const j of g[i]) {
357+
if (j !== fa) {
358+
dist[j] = dist[i] + 1;
359+
dfs(j, i, dist);
360+
}
361+
}
362+
};
363+
364+
const dist1 = Array(n).fill(0);
365+
dfs(0, -1, dist1);
366+
const a = dist1.indexOf(Math.max(...dist1));
367+
368+
const dist2 = Array(n).fill(0);
369+
dfs(a, -1, dist2);
370+
const b = dist2.indexOf(Math.max(...dist2));
371+
372+
const dist3 = Array(n).fill(0);
373+
dfs(b, -1, dist3);
374+
375+
const ans = [];
376+
for (let i = 0; i < n; ++i) {
377+
ans.push(dist2[i] > dist3[i] ? a : b);
378+
}
379+
return ans;
380+
};
381+
```
382+
345383
<!-- tabs:end -->
346384

347385
<!-- solution:end -->

‎solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.cpp‎

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,13 @@ class Solution {
88
g[u].push_back(v);
99
g[v].push_back(u);
1010
}
11-
auto max_node = [&](const vector<int>& dist) {
12-
int mx = ranges::max(dist);
13-
return ranges::find(dist, mx) - dist.begin();
14-
};
1511
vector<int> dist1(n);
1612
dfs(0, -1, dist1);
17-
int a = max_node(dist1);
13+
int a = max_element(dist1.begin(), dist1.end()) - dist1.begin();
1814

1915
vector<int> dist2(n);
2016
dfs(a, -1, dist2);
21-
int b = max_node(dist2);
17+
int b = max_element(dist2.begin(), dist2.end()) - dist2.begin();
2218

2319
vector<int> dist3(n);
2420
dfs(b, -1, dist3);
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* @param {number[][]} edges
3+
* @return {number[]}
4+
*/
5+
var lastMarkedNodes = function (edges) {
6+
const n = edges.length + 1;
7+
const g = Array.from({ length: n }, () => []);
8+
for (const [u, v] of edges) {
9+
g[u].push(v);
10+
g[v].push(u);
11+
}
12+
const dfs = (i, fa, dist) => {
13+
for (const j of g[i]) {
14+
if (j !== fa) {
15+
dist[j] = dist[i] + 1;
16+
dfs(j, i, dist);
17+
}
18+
}
19+
};
20+
21+
const dist1 = Array(n).fill(0);
22+
dfs(0, -1, dist1);
23+
const a = dist1.indexOf(Math.max(...dist1));
24+
25+
const dist2 = Array(n).fill(0);
26+
dfs(a, -1, dist2);
27+
const b = dist2.indexOf(Math.max(...dist2));
28+
29+
const dist3 = Array(n).fill(0);
30+
dfs(b, -1, dist3);
31+
32+
const ans = [];
33+
for (let i = 0; i < n; ++i) {
34+
ans.push(dist2[i] > dist3[i] ? a : b);
35+
}
36+
return ans;
37+
};

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /