首页 > 其他分享 >E71 树形DP+二分 P3523 [POI2011] DYN-Dynamite

E71 树形DP+二分 P3523 [POI2011] DYN-Dynamite

时间:2024-10-25 19:42:40浏览次数:7  
标签:P3523 int POI2011 mid tot DYN Dynamite

视频链接:

 

 

 

P3523 [POI2011] DYN-Dynamite - 洛谷 | 计算机科学教育新生态

// 树形DP+二分 O(nlogn)
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int read(){
  int x=0,f=1;char c=getchar();
  while(c>'9'||c<'0'){if(c=='-') f=-1;c=getchar();}
  while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
  return x*f;
}

const int N=300005;
int idx,head[N],to[N<<1],ne[N<<1];
void add(int x,int y){
  to[++idx]=y;ne[idx]=head[x];head[x]=idx;
}
int n,m,mid,tot,b[N];
int f[N],g[N];

void dfs(int u,int fa){
  f[u]=-1e9;g[u]=1e9;
  for(int i=head[u];i;i=ne[i]){
    int v=to[i];
    if(v==fa) continue;
    dfs(v,u);
    f[u]=max(f[u],f[v]+1);
    g[u]=min(g[u],g[v]+1);
  }
  if(f[u]+g[u]<=mid) f[u]=-1e9;
  if(g[u]>mid&&b[u]) f[u]=max(f[u],0);
  if(f[u]==mid) f[u]=-1e9,g[u]=0,++tot;
}
int check(){
  tot=0;
  dfs(1,0);
  if(f[1]>=0) ++tot;
  return tot<=m;
}
int main(){
  n=read(),m=read();
  for(int i=1;i<=n;++i)b[i]=read();
  for(int i=1;i<n;++i){
    int x=read(),y=read();
    add(x,y);add(y,x);
  }
  int l=-1,r=n;
  while(l+1<r){
    mid=l+r>>1;
    check()?r=mid:l=mid;
  }
  printf("%d\n",r);
}

 

标签:P3523,int,POI2011,mid,tot,DYN,Dynamite
From: https://www.cnblogs.com/dx123/p/18488008

相关文章

  • Spacetime Gaussian Feature Splatting for Real-Time Dynamic View Synthesis
    SpacetimeGaussianFeatureSplattingforReal-TimeDynamicViewSynthesis摘要动态场景的新视角合成一直是一个引人入胜但充满挑战的问题。尽管最近取得了很多进展,但如何同时实现高分辨率的真实感渲染、实时渲染和紧凑的存储,依然是一个巨大的挑战。为了应对这些挑战,......
  • cpp:指针转化(百度AI:static_cast/dynamic_cast/const_cast/reinterpret_cast)
    cpp:指针转化(百度AI:static_cast/dynamic_cast/const_cast/reinterpret_cast)    一、c++指针转化概述: 在C++中,指针转换主要包括静态转换、动态转换、常量转换和重新解释转换四种类型。‌ ‌1、 静态转换(static_cast)‌: -- 用于基本数据类型之间的转换,如将int转换......
  • P8969 幻梦 | Dream with Dynamic
    Sol好题!注意到popcount操作会使数以\(\log\)的速度变小,所以没有加操作的话我们就可以直接暴力维护。但是注意到有加操作,考虑懒标记,先popcount后加。当一个区间popcount之后,值域范围极小,所以考虑暴力对每一种数预处理popcount。这里其实可以用线段树但是我懒了,用了分......
  • dynamsoft_barcode_reader_bundle Python 10.4.2000
    RevolutionizingInventoryManagementinWarehouseswithDronesandBarcodeScanningTechnologydynamsoft_barcode_readerAsbusinessesscaleandsupplychainsbecomemorecomplex,inventorymanagementhasemergedasacriticalchallengeforwarehouseopera......
  • DBPM: 增强时间序列对比学习:一种动态坏对挖掘方法《Towards Enhancing Time Series Co
    今天是2024年10月12日,思路枯竭,还是论文看的太少了,继续看论文.论文:TowardsEnhancingTimeSeriesContrastiveLearning:ADynamicBadPairMiningApproach或者是:TowardsEnhancingTimeSeriesContrastiveLearning:ADynamicBadPairMiningApproachGitHub:https://git......
  • Dynamsoft Barcode Reader SDK Java 10.4.2000
    ImprovingVendorManagementEfficiencywithOCRandDocumentProcessingEffectivevendormanagementintoday’sdynamicbusinesslandscapeofteninvolveshandlinglargevolumesofphysicaldocuments,whichposesasignificantchallenge.Extractingkeydeta......
  • ME 588, Dynamics and Vibration
    ME588,DynamicsandVibrationHomework1Distributed:9/25/2024,Due:10/11/20241.Consideraspring-masssystemmountedonaspinningdiskasshowninFig.1.Thediskspinsatconstantangularvelocityω.Moreover,thediskhasadiametricalslot,alo......
  • 洛谷 P3523 题解
    洛谷P3523[POI2011]DYN-Dynamite分析二分答案,问题转化为:对于给定的\(K\),选择尽可能少的节点,使得所有关键节点都被「覆盖」。对于一个关键节点,「覆盖」的定义为:存在一个被选择的点与这个关键节点的距离不大于\(K\)。方便起见,我们指定\(1\)号节点是这棵树的根节点。我们......
  • Windows11系统mgtdyn.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个mgtdyn.dll文件(挑选合适的版本文件)把它放......
  • 65_索引管理_定制化自己的dynamic mapping策略
    课程大纲1、定制dynamic策略true:遇到陌生字段,就进行dynamicmappingfalse:遇到陌生字段,就忽略strict:遇到陌生字段,就报错PUT/my_index{"mappings":{"my_type":{"dynamic":"strict","properties":{"title":{"type":&......