开始以为是最大权闭合子图,但是边权有点不规则…负数…
这里边权非常特殊
对于一组关系 ( 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;
}
};