Skip to content

Commit 6d7b138

Browse files
authored
Create 2440-create-components-with-same-value.js
1 parent badd57b commit 6d7b138

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number[][]} edges
4+
* @return {number}
5+
*/
6+
const componentValue = function(nums, edges) {
7+
const n = nums.length, sum = nums.reduce((ac, e) => ac + e, 0)
8+
const graph = {}, degree = Array(n).fill(0)
9+
const { min } = Math, mi = min(...nums)
10+
for(const [u, v] of edges) {
11+
if(graph[u] == null) graph[u] = []
12+
if(graph[v] == null) graph[v] = []
13+
graph[u].push(v)
14+
graph[v].push(u)
15+
degree[u]++
16+
degree[v]++
17+
}
18+
19+
20+
for(let t = mi; t < sum; t++) {
21+
if((sum % t === 0) && bfs(t)) return sum / t - 1
22+
}
23+
24+
return 0
25+
26+
27+
function bfs(target) {
28+
const vertices = nums.slice(0), deg = degree.slice(0), q = []
29+
for(let i = 0; i < n; i++) {
30+
if(deg[i] === 1) {
31+
q.push(i)
32+
}
33+
}
34+
35+
while(q.length) {
36+
const cur = q.shift()
37+
deg[cur] = 0
38+
const nxt = graph[cur] || []
39+
for(const e of nxt) {
40+
if(vertices[cur] !== target) vertices[e] += vertices[cur]
41+
deg[e]--
42+
43+
if(deg[e] === 0) return vertices[e] === target
44+
else if(deg[e] === 1) q.push(e)
45+
}
46+
}
47+
return false
48+
}
49+
};
50+

0 commit comments

Comments
 (0)