传送门

开始以为是最大权闭合子图,但是边权有点不规则…负数…

这里边权非常特殊

对于一组关系 ( x , y , z ) (x,y,z) (x,y,z)

点亮两个音符,收益 z z z

点亮其中一个音符,收益 0 0 0

两个都不点亮,收益 − z -z z

发现什么?直接可以把点亮一个音符的价值看成获得 z z z

初始每个价值就看成 − z -z z

这样就把价值独立到每个音符本身上面去了,就可以直接选择是否选择这个音符

class Solution {
public:
    long long f[100009];
    long long wwork(int n, int m, vector<int>& a, vector<vector<int> >& b) 
    {
        long long ans = 0;
        memset( f,0,sizeof(f) );
        for(int i=0;i<m;i++)
        {
            f[b[i][0]-1] += b[i][2]; 
            f[b[i][1]-1] += b[i][2];
            ans -= b[i][2];
        }
        for(int i=0;i<n;i++)    f[i] += a[i];
        for(int i=0;i<n;i++)
            if( f[i]>0 )    ans += f[i];
        return ans;
    }
};