首页 > 其他分享 >树模板

树模板

时间:2024-07-27 16:39:19浏览次数:7  
标签:结点 p1 int up d2 模板 d1

struct Tree {
   int n, d = 0; //顶点,直径,树中心
   //自顶向下u到其叶子结点最远距离d1,次长距离d2(与最长路径无公共边)
   //p1,p2表示结点u向下更新时是由哪个结点更新来的
   //up表示结点u向上到祖宗结点的最远距离
   vector<int> d1, d2, p1, p2, up;
   vector<vector<int>> g;
   Tree(int n): n(n), d1(n + 1), d2(n + 1), g(n + 1), p1(n + 1), p2(n + 1), up(n + 1) {}

   void  add(int u, int v) {
      g[u].emplace_back(v);
      g[v].emplace_back(u);
   }
   //求直径//自顶向下求u到叶子结点的最远距离
   void dfs(int u, int fa) {
      d1[u] = d2[u] = 0;
      for (auto v : g[u]) {
         if (v == fa)continue;
         dfs(v, u);
         auto t = d1[v] + 1;
         if (t > d1[u]) {
            d2[u] = d1[u], p2[u] = p1[u];
            d1[u] = t, p1[u] = v;
         } else if (t > d2[u]) {
            d2[u] = t, p2[u] = v;
         }
      }
      d = max(d, d1[u] + d2[u]);
   }
   //自底向上求u到其它结点的最长路径
   void dfsup(int u, int fa) {
      for (auto v : g[u]) {
         if (v == fa) continue;
         //如果父结点u向下的最长路径经过v
         if (p1[u] == v) {
            //结点v向上走到最长路径为
            //父结点u继续向上的的最长路径和u向下走的次长路径的最大值+边权
            up[v] = max(up[u], d2[u]) + 1;
         } else {
            //如果父结点u向下的最长路径不经过v
            up[v] = max(up[u], d1[u]) + 1;
         }
         dfsup(v, u);
      }
   }

   //求树的直径
   int FindDiameter() {
      dfs(1, 0);
      return d;
   }

   //求树的中心
   vector<int> FindCenter() {
      dfsup(1, 0);
      i64 res = INT_MAX;
      vector<int> mid;
      for (int i = 1; i <= n; i ++) {
         auto t = max(d1[i], up[i]);
         if (t < res) {
            res = t;
            vector<int>().swap(mid);
            mid.emplace_back(i);
         } else if (t == res) {
            mid.emplace_back(i);
         }
      }
      return mid;
   }

};

标签:结点,p1,int,up,d2,模板,d1
From: https://www.cnblogs.com/Kescholar/p/18327136

相关文章

  • Django 仅发送更改响应而不是完整模板
    如何只发送一条警报消息来响应请求,而不必发送专门为警报制作的模板?我正在使用Javascript异步调用。我只需要警报html响应即可呈现InnerHTML查看@login_required(login_url="/login/")@csrf_protectdefusersave(request):msg=messages.add_message(req......
  • 使用 Flask 时,为什么这个 html 模板不能在 Web 浏览器中呈现抓取的网站数据?
    每当我在终端中打印出抓取的数据时,它都会很好地显示抓取的数据,但每当我尝试使用PythonFlask提供它时,我使用的HTML模板不会在Web浏览器中呈现数据。如果您能帮我修复此代码。Python(Flask)文件:fromflaskimportFlask,render_templatefrombs4importBeautifulSoup......
  • 网站源码教育机构pbootcms模板网页设计主题
    教育机构的网站设计分享我很高兴向大家介绍我刚刚制作的教育机构的网站设计。友好的站点界面,是打动访客的第一步。教育机构网站的主题网站设计旨在向访客展示机构的专业性、教学质量以及服务内容,同时提供一个用户友好的界面,使访客能够轻松地获取所需信息、进行互动和报名。以......
  • nuclei模板编写总结
    一、脚本的语法格式大小写敏感缩进:使用缩进表示层级关系,YAML使用空格进行缩进,通常每个缩进级别为两个空格。键值对:YAML通过键值对来存储数据,键和值之间用冒号:分隔。列表:使用短横线-来表示列表中的项。注释:以#开头的行是注释。字符串:字符串可以不使用引号,也可以使用单引号......
  • 51nod-基因匹配+luogu-【模板】最长公共子序列
    https://www.luogu.com.cn/problem/P1439https://class.51nod.com/Html/Textbook/ChapterIndex.html#textbookId=126&chapterId=338以上两个都是特例,一个是每个元素不重复,一个是每个元素均有5个。正确性说明参考:https://www.luogu.com.cn/article/1bcs9052由于一般情况可能出......
  • SpringBoot Thymeleaf 模板标签
    扩展Thymeleaf模板标签上一篇我们写到SpringBoot依赖之Thymeleaf模版引擎的使用,当时只列举了简单文本标签,下面针对多标签进行分析和分享。Thymeleaf的模板标签,包括文本显示、属性设置、条件判断、循环迭代、表单处理、片段引用、国际化支持等常用功能。我们尽可能......
  • 易优CMS模板标签ui开关标签
    【基础用法】标签:ui描述:可视化类型的模板必须引入的主标签,建议在html代码的body底部引入,该标签包含外观调试通用的css、js。用法:{eyou:uiopen='off'/}属性:open=''是否开启,on为开启,off为关闭涉及表字段:无  【更多示例】-------------------------------示例1----------......
  • 易优CMS模板标签SQL数据查询查询数据表ey_arctype,指定栏目ID的基本信息,不使用数据缓存
    【基础用法】标签:sql描述:用于获取MySQL数据库内容的标签。用法:{eyou:sqlsql=''cachetime='3600'empty='没有数据'}{$field.数据表相应的字段名称}{/eyou:sql}属性:sql=''需要查询的SQL语句cachetime='3600'数据缓存时间,默认缓存25小时,即86400秒empty=''没有数据时显示......
  • 函数模板重载和实例化例题
    //CPPTest.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。//#include<fstream>#include<iostream>#include<string>#include<cstring>#include<cmath>usingnamespacestd;template<classT>Tmaxn(T*arr,intn){ Tmax......
  • 手写模板的设计
    手写模板的设计本教程由做字体网(www.zuoziti.com)友情提供!本教程是制作手写字体系列教程,建议从序言部分开始阅读学习!如需交流,请加QQ924268440本节视频教程先看一下模板样子从这一节我们正式开始制作手写字体,制作手写字体的第一步就是制作手写字体模板,先看一下我的模......