首页 > 其他分享 >D50 树的直径 P3629 [APIO2010] 巡逻

D50 树的直径 P3629 [APIO2010] 巡逻

时间:2024-09-17 17:50:42浏览次数:11  
标签:head int APIO2010 ne P3629 D50 include

视频链接:

 

P3629 [APIO2010] 巡逻 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

// 两次DFS+树形DP O(n)
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

const int N=100005;
int idx=1,head[N],to[N<<1],ne[N<<1],w[N<<1];
void add(int x,int y){
  to[++idx]=y,w[idx]=1,ne[idx]=head[x],head[x]=idx;
}
int d[N],fa[N],col[N];
int n,k,p,st,ed,d1,d2;

void dfs(int x,int f){
  fa[x]=f; //记录路径
  if(d[x]>d[p]) p=x; //更新端点
  for(int i=head[x];i;i=ne[i]){
    int y=to[i];
    if(y==f)continue;
    d[y]=d[x]+w[i];
    dfs(y,x);
  }
}
void change(int x,int f){
  for(int i=head[x];i;i=ne[i]){
    int y=to[i];
    if(y==f)continue;
    if(col[y])w[i]=-1,w[i^1]=-1;
    change(y,x);
  }
}
void dfs2(int x,int f){
  for(int i=head[x];i;i=ne[i]){
    int y=to[i];
    if(y==f)continue;
    dfs2(y,x);
    d2=max(d2,d[y]+d[x]+w[i]);
    d[x]=max(d[x],d[y]+w[i]);
  }
}
int main(){
  scanf("%d%d",&n,&k);
  for(int i=1,x,y;i<n;++i){
    scanf("%d%d",&x,&y);
    add(x,y),add(y,x);
  }
  dfs(1,0); st=p; d[p]=0;
  dfs(p,0); ed=p; d1=d[p]; //两次DFS
  
  for(int i=ed;i;i=fa[i])col[i]=1; //直径染色
  change(st,0); //修改直径的边权
  memset(d,0,sizeof d);
  dfs2(st,0);   //树形DP
  
  if(k==1) printf("%d\n",2*n-d1-1);
  else printf("%d\n",2*n-d1-d2);
}

 

标签:head,int,APIO2010,ne,P3629,D50,include
From: https://www.cnblogs.com/dx123/p/18407279

相关文章

  • [lnsyoj538/luoguP3628/APIO2010]特别行动队
    题意原题链接给定序列\(a\)和自定义二次函数\(f(x)=ax^2+bx+c(a<0)\),要求将\(a\)分为几段(不妨设为\(k\)段),使得\(\sum_{i=1}^{k}f(\sum_{j=l_i}^{r_i}a_j)\)的值最大,求最大的值sol设计状态转移方程。显然,\(dp_i\)可以由\(dp_j\)转移当且仅当\(j<i\),这表示......
  • XD5012高速计数模块(差分)功能与选型及安装说明
    Profinet远程IO模块:XD5012高速计数模块(差分)功能与安装说明XD5012高速计数模块(差分)具有出色的计数功能,能够快速而精确地统计输入信号的数量。无论是频率计数、脉冲宽度测量还是时间测量,都能够轻松完成。这给各种应用场景提供了极大的便利,比如工业自动化控制。 本文将详细介绍X......
  • D50SB100-ASEMI逆变焊机专用D50SB100
    编辑:llD50SB100-ASEMI逆变焊机专用D50SB100型号:D50SB100品牌:ASEMI封装:DSB-5批号:2024+现货:50000+正向电流(Id):50A反向耐压(VRRM):1000V正向浪涌电流:500A正向电压(VF):1.05V引脚数量:4芯片个数:4芯片尺寸:102MIL功率(Pd):大功率工作温度:-55°C~150°C类型:整流扁桥、插件整流桥......
  • 牛客周赛 Round50 E-小红的树上移动 (期望dp+逆元)
    E-小红的树上移动题目:题意:在一个树上从根节点移动,每次都会向更深的下一层走,如果此时已经是叶子节点没有下一层就会停留在这里。求出移动次数的期望,移动次数就是从根节点1开始到此节点的深度。思路:画一个草图不难看出其实在同一层中,到达每个点的概率是一样的。并且,对于每一层......
  • Easy-laser激光对中仪维修D505激光测平仪维修
    Easylaser激光对中仪多应用于风力发电业的塔架、机架、轮毂、偏航轴承和变桨轴承的几何指标测量中。此系列常见维修型号包括D450;D480;D505;D525;D550等。Easy-Laser对中仪维修注意事项:测量功能包括:塔架法兰平面度、内倾度。机架发电机底座、主轴轴承底座和齿轮箱底座平面度。......
  • System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3
    VS2022.netCore5.0项目编译没问题,运行时报这个错System.IO.FileNotFoundException:“Couldnotloadfileorassembly'System.Runtime,Version=6.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a'.系统找不到指定的文件。” 我这里遇到这个问题的原因是,v......
  • P3629 [APIO2010] 巡逻
    原题可以发现,当\(K=0\)时,答案为\(2(n-1)\),而当在两端点连了一条边后,则操作方法为如果这条路径上的某条边被标记过,则取消这条边标记;否则把这条边标记为标记过,答案即为未被标记的边*2+标记过的边+连边的个数当\(K=1\)时:答案显然为树的直径当\(K=2\)时:我们还是考......
  • P3629 巡逻 LCA题解
    原题:洛谷P3629问题转化首先,给定的图是一个有\(n\)个点,\(n-1\)条边的无向连通图,这个图就等价于一棵树。不建立新的道路时,从\(1\)号节点出发,把整棵树上的每条边遍历至少一次,再回到\(1\)号节点,会恰好经过每条边两次,路线总长度为\(2(n-1)\),如下图最左边的部分所示。根据树......
  • 洛谷P3629 [APIO2010] 巡逻题解
    题目链接P3629[APIO2010]巡逻-洛谷|计算机科学教育新生态(luogu.com.cn)思路n个村庄,n-1条道路,原图为树1.若k=0(不修建道路)那么答案为(n-1)*2 每个道路会走两遍2.若k为1(修建一条道路)设修建的道路(r1)所在的环长度为L那么答案为(n-1)*2-L+2可以看到r1所在环的道路只走了......
  • Raid0、Raid1、Raid5、Raid6、Raid10、Raid50、Raid60的原理、特点、性能区别
    一.RAID是什么?RAID(RedundantArrayofIndependentDisks)即独立磁盘冗余阵列,简称为「磁盘阵列」,其实就是用多个独立的磁盘组成在一起形成一个大的磁盘系统,从而实现比单块磁盘更好的存储性能和更高的可靠性。二.RAID有哪些?RAID方案常见的可以分为:RAID0RAID1RAID5RAID6......