警示后人:如果你的 WA 60 的代码挂了后面八个点
查看原帖
警示后人:如果你的 WA 60 的代码挂了后面八个点
528540
ISTP楼主2024/1/18 17:35

你大概是把符合要求的边也加入 multiset 里了。比如这种写法:

while(!a[u].empty()){
  int x = *a[u].begin(), val = k - x; //k是你二分出来的最小链的最大值
  a[u].erase(a[u].begin());
  if(val <= 0){
    cnt ++;
    continue;
  }
  multiset<int>::iterator iter = a[u].lower_bound(val);
  if(iter == a[u].end()) ret = max(ret, x);
  else cnt ++, a[u].erase(iter);
}

绝对不可以!!

因为这样会让较小的边和长度已经符合要求的边配对,但是当前根节点可能需要这条较小边组成更长的链(即增加当前根节点点权)

所以在往 multiset 里放边时,把长度符合要的边剔除掉并统计答案。

2024/1/18 17:35
加载中...