首页 > 其他分享 >树形dp【树的直径】

树形dp【树的直径】

时间:2023-10-25 20:22:59浏览次数:39  
标签:cnt int vis 树形 直径 d2 mx dp d1

bfs

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
#define LL long long
int cnt,h[N],to[N*2],w[N*2],ne[N*2];
void add(int a,int b,int c){
  ne[++cnt]=h[a];
  w[cnt]=c;
  to[cnt]=b;
  h[a]=cnt;
}
LL d[N],mx,vis[N];
void bfs(int x){
  memset(d,0,sizeof d);
  memset(vis,0,sizeof vis);
  queue<LL> q;
  q.push(x);
  while(q.size()){
   LL t=q.front();
   q.pop();
   if(vis[t]) continue;
   vis[t]=1;
   for(int i=h[t];i;i=ne[i]){
     int w1=w[i],v=to[i];
     if(d[v]<d[t]+w1&&!vis[v]){
       d[v]=d[t]+w1;
       if(d[v]>d[mx]) mx=v;
       q.push(v);
     }
   } 
  }
}

int main(){
  int n;
  LL ans=0;
  cin>>n;
  for(int i=1;i<n;i++){
    int a,b,c;
    cin>>a>>b>>c;
    ans+=1LL*c*2;
    add(a,b,c);
    add(b,a,c);
  }
  bfs(1);
  bfs(mx);
  ans-=d[mx];
  cout<<ans;
  return 0;
}
dfs
点击查看代码
const int N = 10000 + 10;

int n, d = 0;
int d1[N], d2[N];
vector<int> E[N];

void dfs(int u, int fa) {
  d1[u] = d2[u] = 0;
  for (int v : E[u]) {
    if (v == fa) continue;
    dfs(v, u);
    int t = d1[v] + 1;
    if (t > d1[u])
      d2[u] = d1[u], d1[u] = t;
    else if (t > d2[u])
      d2[u] = t;
  }
  d = max(d, d1[u] + d2[u]);
}

int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    int u, v;
    scanf("%d %d", &u, &v);
    E[u].push_back(v), E[v].push_back(u);
  }
  dfs(1, 0);
  printf("%d\n", d);
  return 0;
}

标签:cnt,int,vis,树形,直径,d2,mx,dp,d1
From: https://www.cnblogs.com/bu-fan/p/17788033.html

相关文章

  • cdp Page.addScriptToEvaluateOnNewDocument
     加载新页面之前插入自定义的JavaScript脚本  selenium过环境检测```pythonwithopen(path+'/stealth.min.js')asf:js=f.read()driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",{"source":js})``` ......
  • Wordpress Restful API Auth
    1.0Whydoesitnotwork? DELETE|http://127.0.0.1/wordpress.002/wp-json/wp/v2/smokes/20{"code":"rest_cannot_delete","message":"Sorry,youarenotallowedtodeletethispost.","data"......
  • 进程,线程,线程生命周期,原生线程,线程调度,Thread,ThreadPool,Task,Parallel,线程安全容器
    1.进程;程序在服务器上运行时,占用的计算机资源合集,就是进程2.线程:是程序能够独立运行的最小单位,共享进程的资源;3.线程的生命周期:3.1新建,启动,可运行,正在运行,new,start,runnable,running,dead,blocked阻塞4.原生线程:由操作系统负责创建、运行、切换、终止的线程就是原生线程5.线程......
  • JS树形数组扁平化
    如题,有时候需要对树形数组深层去找符合字段的那一串json,苦于循环找太费劲,索引选择扁平化,找起来方便很多lettreeList=[{id:'1',name:'水果',value:3,children:[{id:'1-1',......
  • MCP2515国产替代兼容方案DPC15完全PIN对PIN支持spi通信的CAN总线控制芯片
    说明DPC15是一款独立控制器局域网络(ControllerAreaNetwork,CAN)协议控制器,完全支持CANV2.0B技术规范。该器件能发送和接收标准和扩展数据顿以及远程帧。MCP2515自带的两个验收屏蔽寄存器和六个验收滤波寄存器可以过滤掉不想要的报文,因此减少了主单片机(MCU)的开销。DPC15......
  • 树的直径小记
    我们总是在刷那些常考的算法,却忽略一些冷门算法,以至于一涉及这些就不会。\(~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\)——题记读本章所需思维:反证法定义:树上任意两节点之间最长的简单路径即......
  • 10月24日用socketserver模块TCP和UDP的服务器
    目录socketserver模块TCP协议的服务器以及客户端UDP协议的服务器以及客户端修改UDP修改版socketserver模块为什么要考虑这个模块呢?因为真实情况下不一定只有一个客户端连接,如果我使用socket模块就无法实现一个服务器连接多个客户端同时回复客户端的数据,下面先展示一下这个情况图......
  • CF809D Hitchhiking in the Baltic States-平衡树+DP
    CF809DHitchhikingintheBalticStates-平衡树+DPStatement给出\(n\)个区间\([l_i,r_i]\)和\(n\)个未知数\(a_1,a_2,\dots,a_n\),现在你要确定这\(n\)个数,使得\(a_i\in[l_i,r_i]\),并且这个序列的最长严格上升子序列尽可能大,求这个最大值。\(1\leqn\leq3\times1......
  • vue + element ui 树形半选传父级id给后台,回显实现
    1.vue2:  需要关联父子级:Html部分check-strictly="false"<el-tree:data="dataTree"highlight-currentshow-checkbox:check-strictly="false"node-key="id":props="defaultProps&......
  • 好好回答下 TCP 和 UDP 的区别!
    写了这么多篇关于TCP和UDP的文章,还没有好好聊过这两个协议的区别,这篇文章我们就来开诚布公的谈一谈。关于TCP和UDP,想必大家都看过一张这样的图。有一个小姑娘在对着瓶口慢慢的喝水,下面写着可靠的传输,少女的衣服没有被水浸湿,这张图被称为TCP。然后又有一个小姑娘在举着水......