前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >牛客 共鸣问题(思维难题)

牛客 共鸣问题(思维难题)

作者头像
Michael阿明
发布2021-02-19 15:02:33
2670
发布2021-02-19 15:02:33
举报
文章被收录于专栏:Michael阿明学习之路

文章目录

1. 题目

链接:https://ac.nowcoder.com/acm/contest/10325/B 来源:牛客网

现在有n个音符和m对共鸣关系,编号为1~n, 每个音符自己有一个奏响时的优美程度, 共鸣关系(x,y,z)表示音符x和y同时奏响的额外优美程度是 z,同时不奏响则为 -z,其他情况为0。 音符可以选择奏响或者不奏响,不奏响的音符没有优美程度。 我们想知道最大的优美程度和是多少,我们不需要知道具体是哪些音符被奏响了,只需输出最大和即可。

共鸣关系可能有重复,其共鸣效果也会重复叠加。

代码语言:javascript
复制
示例1
输入
2,1,[-10,-10],[[1,2,5]]
返回值
-5

备注:
数据包括两个数n,m,一个长度为n的数组a[],
表示每个音符奏响时的优美程度(a[0]表示第一个音符),
一个第一维长度为m的二维数组,描述m组共鸣关系。
输出一个整数表示答案。
n,m<=100000,所有的优美程度和额外优美程度的绝对值<=33000

2. 解题

代码语言:javascript
复制
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param n int整型 
     * @param m int整型 
     * @param a int整型vector 
     * @param b int整型vector<vector<>> 
     * @return long长整型
     */
    long long wwork(int n, int m, vector<int>& a, vector<vector<int> >& b) {
        // write code here
        // 初始为都没有奏响,收益是 -z
        long long ans = 0;
        vector<long long> delta(n, 0);
        for(int i = 0; i < m; ++i) 
        {
            ans -= b[i][2]; // 都没有响 -z
            delta[b[i][0]-1] += b[i][2];//响一个的话 +z,跟上面的-z抵消为0
            delta[b[i][1]-1] += b[i][2];//同时响的话,为z
        }
        for(int i = 0; i < n; i++)
        {
            if(a[i]+delta[i] > 0)//收益为正
                ans += a[i]+delta[i];
        }
        return ans;
    }
};

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/12/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档