首页 > 其他分享 >D49 树的直径 P2491 [SDOI2011] 消防

D49 树的直径 P2491 [SDOI2011] 消防

时间:2024-09-16 10:24:30浏览次数:1  
标签:SDOI2011 int fa D49 P2491 直径 include

视频链接:

 

P2491 [SDOI2011] 消防 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

// 两次DFS+双指针 O(n)
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

const int N=300010;
int idx,head[N];
struct edge{int to,w,ne;}e[N<<1];
void add(int u,int v,int w){
  e[++idx]={v,w,head[u]},head[u]=idx;
}
int n,s,p,r,d[N],fa[N],col[N];
int ans=2e9;

void dfs(int x,int ff){
  fa[x]=ff; //记录路径
  if(d[x]>d[p]) p=x; //更新端点
  for(int i=head[x];i;i=e[i].ne){
    int y=e[i].to,w=e[i].w;
    if(y==ff||col[y]) continue;
    d[y]=d[x]+w;
    dfs(y,x);
  }
}
int main(){
  scanf("%d%d",&n,&s);
  for(int i=1,u,v,w;i<n;i++){
    scanf("%d%d%d",&u,&v,&w);
    add(u,v,w);add(v,u,w);
  }
  dfs(1,0);
  d[p]=0;
  dfs(p,0); r=p; //直径右端点
  
  for(int i=r,j=r;i;i=fa[i]){ //双指针
    while(d[j]-d[i]>s) j=fa[j];
    ans=min(ans,max(d[i],d[r]-d[j]));
  } //直径上的答案
  for(int i=r;i;i=fa[i])col[i]=1; //直径染色
  for(int i=r;i;i=fa[i]){
    p=i;d[i]=0;
    dfs(i,fa[i]);
  } //直径外的答案
  for(int i=1;i<=n;i++)ans=max(ans,d[i]);
  printf("%d\n",ans);
}

 

标签:SDOI2011,int,fa,D49,P2491,直径,include
From: https://www.cnblogs.com/dx123/p/18407277

相关文章

  • [SDOI2011] 拦截导弹
    这是CDQ分治优化1D/1D动态规划的模板题(1D/1D动态规划的概念见OI-wiki)一般来说,优化的1D/1D/动态规划,在转移的时候是由不等式作为条件的,所以可以像这样转化为三维偏序用线段树进行如下维护:1.维护区间最大值2.查询区间最大值的某一数组的和代码见下(一定要学会将数组翻转的操作)#......
  • P2495 [SDOI2011] 消耗战
    P2495[SDOI2011]消耗战虚树优化dp模板题考虑\(m=1\)。只需要简单的树形dp,设\(f_i\)表示\(i\)子树中的关键点都到不了\(i\)点的最小代价。转移枚举子节点\(v\),有:若\(v\)点为关键点,\(f_u=f_u+w(u,v)\)。否则,\(f_u=f_u+\min(f_v,w(u,v))\)。如果每次询问都跑一遍......
  • P2487 [SDOI2011] 拦截导弹 题解
    题目链接:拦截导弹约定:本题中提到的\(LDS\)和\(LIS\)不是严格单调,而是非严格单调,即为\(\le或者\ge\)。比较神奇的题,问的东西比较多,我们逐渐拆分:对于第一个问题而言,这个dp方程是很好写的:\[dp[i]=\max{dp[j]}+1(i<j,h[i]\leh[j],v[i]\lev[j])\]其中\(dp[i]\)即......
  • macOS Monterey 12.2 (21D49) 正式版 ISO、IPSW、PKG 下载
    本站下载的macOSMonterey软件包,既可以拖拽到Applications(应用程序)下直接安装,也可以制作启动U盘安装,或者在虚拟机中启动安装。2022年1月27日,macOSMonterey12.2正式版于今天凌晨推送,大版本升级建议全新安装。本站提供可启动的ISO镜像下载,可以用于全新安装或者升级,也......
  • macOS Monterey 12.2 (21D49) Boot ISO 原版可引导镜像
    作者主页:www.sysin.org下载地址更新这里列出ISO启动镜像下载链接,更多格式请访问以下地址:macOSMonterey12.2(21D49)正式版ISO、IPSW、PKG下载应用场景macOSMonterey12可启动ISO镜像,基于Apple原版App制作,可以用于虚机安装,可以拖拽到Applications(应用程序)下直接双击......
  • P2495 [SDOI2011] 消耗战
    题意给定一棵有边权的无根树。\(q\)次询问,每次询问\(k\)个点。求断边使得根节点\(1\)与\(k\)个点不连通的最小边权。Sol虚树。\(n^2\)dp是trivial的。考虑优化。注意到其中很多点都是无用的。考虑保留有效点。不难发现,有效点集为询问点两两\(lca\)的集合......
  • P2486 [SDOI2011] 染色
    题目描述给定一棵\(n\)个节点的无根树,共有\(m\)个操作,操作分为两种:将节点\(a\)到节点\(b\)的路径上的所有点(包括\(a\)和\(b\))都染成颜色\(c\)。询问节点\(a\)到节点\(b\)的路径上的颜色段数量。颜色段的定义是极长的连续相同颜色被认为是一段。例如112221......
  • 解题报告P2486 [SDOI2011] 染色
    P2486[SDOI2011]染色题目链接分两段,最后靠同一条重链合树剖加线段树,典中典。这题的线段树维护比较新颖。线段树中维护这个区间左右端点的颜色和颜色段数量。建树和查询和修改时要判断左区间的右端点和右区间的左端点是否颜色相同。如果不相同,直接将段数相加,否则减一。然......
  • 「SDOI2011」 黑白棋
    绷不住了,洛谷上的dp没一个表述清楚了,一怒之下写一篇题解。注意本题解只讲dp部分。首先转化不合法的充要条件就是:设相邻两个棋子中间间隔数量为\(b\),那么对于任意非负整数\(i\)都有\((d+1)|\sum(b\&2^i)\)。其中\(\&\)是按位与运算。所以我们要计数一个有序的并且包含......
  • P2486 [SDOI2011] 染色 题解
    P2486[SDOI2011]染色神仙树剖题。题意给你一棵树,每个点都有颜色,支持下面两种操作:路径染色。路径颜色段数量查询。树剖部分我们看到树上问题,不好处理,所以想办法给他树剖搞一搞,给他转化成序列的操作。我们树剖就是正常的树剖,然后我们考虑如何维护这个颜色序列。我......