看看有没有类似这样的语句:
for(auto v:g[u]){ f[v]=max(f[v],f[u]+val[v]); q.push(v); }
如果有,请改成:
for(auto v:g[u]){ if(f[v]<f[u]+val[v]){ f[v]=max(f[v],f[u]+val[v]); q.push(v); } }
这样可以避免存储大量对答案没有贡献的点
还有只需要对起点进行tarjan,因为只有起点能到的点才对答案有贡献