返回介绍

solution / 2400-2499 / 2497.Maximum Star Sum of a Graph / README_EN

发布于 2024-06-17 01:03:04 字数 5739 浏览 0 评论 0 收藏 0

2497. Maximum Star Sum of a Graph

中文文档

Description

There is an undirected graph consisting of n nodes numbered from 0 to n - 1. You are given a 0-indexed integer array vals of length n where vals[i] denotes the value of the ith node.

You are also given a 2D integer array edges where edges[i] = [ai, bi] denotes that there exists an undirected edge connecting nodes ai and bi.

A star graph is a subgraph of the given graph having a center node containing 0 or more neighbors. In other words, it is a subset of edges of the given graph such that there exists a common node for all edges.

The image below shows star graphs with 3 and 4 neighbors respectively, centered at the blue node.

The star sum is the sum of the values of all the nodes present in the star graph.

Given an integer k, return _the maximum star sum of a star graph containing at most _k_ edges._

 

Example 1:

Input: vals = [1,2,3,4,10,-10,-20], edges = [[0,1],[1,2],[1,3],[3,4],[3,5],[3,6]], k = 2
Output: 16
Explanation: The above diagram represents the input graph.
The star graph with the maximum star sum is denoted by blue. It is centered at 3 and includes its neighbors 1 and 4.
It can be shown it is not possible to get a star graph with a sum greater than 16.

Example 2:

Input: vals = [-5], edges = [], k = 0
Output: -5
Explanation: There is only one possible star graph, which is node 0 itself.
Hence, we return -5.

 

Constraints:

  • n == vals.length
  • 1 <= n <= 105
  • -104 <= vals[i] <= 104
  • 0 <= edges.length <= min(n * (n - 1) / 2, 105)
  • edges[i].length == 2
  • 0 <= ai, bi <= n - 1
  • ai != bi
  • 0 <= k <= n - 1

Solutions

Solution 1

class Solution:
  def maxStarSum(self, vals: List[int], edges: List[List[int]], k: int) -> int:
    g = defaultdict(list)
    for a, b in edges:
      if vals[b] > 0:
        g[a].append(vals[b])
      if vals[a] > 0:
        g[b].append(vals[a])
    for bs in g.values():
      bs.sort(reverse=True)
    return max(v + sum(g[i][:k]) for i, v in enumerate(vals))
class Solution {
  public int maxStarSum(int[] vals, int[][] edges, int k) {
    int n = vals.length;
    List<Integer>[] g = new List[n];
    Arrays.setAll(g, key -> new ArrayList<>());
    for (var e : edges) {
      int a = e[0], b = e[1];
      if (vals[b] > 0) {
        g[a].add(vals[b]);
      }
      if (vals[a] > 0) {
        g[b].add(vals[a]);
      }
    }
    for (var e : g) {
      Collections.sort(e, (a, b) -> b - a);
    }
    int ans = Integer.MIN_VALUE;
    for (int i = 0; i < n; ++i) {
      int v = vals[i];
      for (int j = 0; j < Math.min(g[i].size(), k); ++j) {
        v += g[i].get(j);
      }
      ans = Math.max(ans, v);
    }
    return ans;
  }
}
class Solution {
public:
  int maxStarSum(vector<int>& vals, vector<vector<int>>& edges, int k) {
    int n = vals.size();
    vector<vector<int>> g(n);
    for (auto& e : edges) {
      int a = e[0], b = e[1];
      if (vals[b] > 0) g[a].emplace_back(vals[b]);
      if (vals[a] > 0) g[b].emplace_back(vals[a]);
    }
    for (auto& e : g) sort(e.rbegin(), e.rend());
    int ans = INT_MIN;
    for (int i = 0; i < n; ++i) {
      int v = vals[i];
      for (int j = 0; j < min((int) g[i].size(), k); ++j) v += g[i][j];
      ans = max(ans, v);
    }
    return ans;
  }
};
func maxStarSum(vals []int, edges [][]int, k int) (ans int) {
  n := len(vals)
  g := make([][]int, n)
  for _, e := range edges {
    a, b := e[0], e[1]
    if vals[b] > 0 {
      g[a] = append(g[a], vals[b])
    }
    if vals[a] > 0 {
      g[b] = append(g[b], vals[a])
    }
  }
  for _, e := range g {
    sort.Sort(sort.Reverse(sort.IntSlice(e)))
  }
  ans = math.MinInt32
  for i, v := range vals {
    for j := 0; j < min(len(g[i]), k); j++ {
      v += g[i][j]
    }
    ans = max(ans, v)
  }
  return
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文