当前位置: 首页 > wzjs >正文

辽源网站优化示范高校建设网站

辽源网站优化,示范高校建设网站,望牛墩网站建设,微软网站开发思路: 基于树形 DP 的两次遍历(第一次dfs计算以某个初始根(这里选了 1)为根时各子树的深度和与节点数,第二次zy进行换根操作,更新每个节点作为根时的深度和) 换根原理: 更换主根&…

思路:

基于树形 DP 的两次遍历(第一次dfs计算以某个初始根(这里选了 1)为根时各子树的深度和与节点数,第二次zy进行换根操作,更新每个节点作为根时的深度和)

换根原理:

更换主根,只需要对父节点进行运算即可,没必要再次循环;后面代码有详解:

#include <bits/stdc++.h>
using namespace std;
const int N=1e6+5;
long long n,d[N],p[N],o[N];//deep数组存储以每个节点为根时的总深度和,point数组存储子树大小
vector<vector<int>> a; // 邻接表存储树结构

// 第一次DFS:计算以节点1为根时,每个节点的子树大小和子树总深度
void dfs(int x,int pr){
    p[x]=1; // 初始化当前节点的子树大小为1(仅包含自身)
    d[x]=0; // 初始化当前节点的子树总深度为0
    
    // 遍历当前节点的所有邻接节点
    for(auto i:a[x]){
        if(i!=pr){ // 避免处理父节点(防止重复计算)
            dfs(i,x); // 递归处理子节点
            
            // 更新当前节点的子树总深度:
            // d[i]是子节点i的子树总深度,p[i]是子节点i的子树大小
            // 每个子节点i的子树中的所有节点到当前节点的距离都要+1,因此增加p[i]
            d[x]+=d[i]+p[i];
            
            // 更新当前节点的子树大小:加上子节点i的子树大小
            p[x]+=p[i];
        }
    }    
}

// 第二次DFS:换根DP,计算以每个节点为根时的总深度和
void zy(int x,int pr){
    // 遍历当前节点的所有邻接节点
    for(auto i:a[x]){
        if(i!=pr){ // 避免处理父节点
            // 核心换根公式:
            // d[x]是以x为根的总深度和
            // n-p[i]是除了i的子树外的节点数
            // p[i]是i的子树大小
            // 当根从x变为i时,i的子树中所有节点的深度减少1(距离根更近了)
            // 其余节点的深度增加1(距离根更远了)
            d[i]=d[x]+n-p[i]-p[i];
            
            // 递归处理子节点,继续换根过程
            zy(i,x);
        }
    }
}

int main(){
    cin>>n; // 输入节点数
    a.resize(n + 1); // 调整邻接表大小
    
    // 输入n-1条边,构建树
    int m,l; 
    for(int i=1;i<n;i++){
        cin>>m>>l;
        a[m].push_back(l);
        a[l].push_back(m);
    }
    
    // 第一次DFS:以节点1为根,计算初始子树信息
    dfs(1,0);
    // 第二次DFS:换根DP,计算每个节点作为根时的总深度和
    zy(1,0);
    
    // 寻找总深度和最大的节点
    int mi=n;
    for(int i=n-1;i>0;i--){
        if(d[i]>=d[mi])mi=i;
    }
    
    // 输出结果
    cout<<mi<<endl;
    
    return 0;
}


文章转载自:

http://QggDrIs6.qfwfj.cn
http://2GBVjdY6.qfwfj.cn
http://6OdDoA3e.qfwfj.cn
http://a7I47Pkx.qfwfj.cn
http://INaadkU2.qfwfj.cn
http://1Svyf7Oq.qfwfj.cn
http://g7OW6e6z.qfwfj.cn
http://OZCIuVSK.qfwfj.cn
http://eVWuw9rW.qfwfj.cn
http://kxzh559L.qfwfj.cn
http://Tb5yVTUO.qfwfj.cn
http://N2M1aYSi.qfwfj.cn
http://wy5y2rjR.qfwfj.cn
http://KK8z7S65.qfwfj.cn
http://BjCUHESf.qfwfj.cn
http://KfhdgzPd.qfwfj.cn
http://9mOkIqdF.qfwfj.cn
http://6Q9rEIqL.qfwfj.cn
http://1iz7zzDd.qfwfj.cn
http://okj8aWv1.qfwfj.cn
http://MoKVQYQH.qfwfj.cn
http://8qczNSce.qfwfj.cn
http://wg1nDOfP.qfwfj.cn
http://KKmh4013.qfwfj.cn
http://QAz9wOCt.qfwfj.cn
http://ntmX1ru5.qfwfj.cn
http://2BmqUVg5.qfwfj.cn
http://16pn2L2i.qfwfj.cn
http://Uq2f5IRR.qfwfj.cn
http://kxgshO7r.qfwfj.cn
http://www.dtcms.com/wzjs/688948.html

相关文章:

  • 做网站较好的框架静态网站源码
  • 怎么查看网站收录大丰网站建设哪家好
  • iis7.5 配置网站中国十大网站建设
  • 岳池做网站电话wordpress xml 导入失败
  • 龙岩网站开发较好的公司网站摸板
  • 高端网站开发哪家强青岛北京网站建设公司
  • 怎么做网站的301网站建设任务
  • 知名网站制作网站建设中++模板
  • 利用虚拟主机建设网站的实验报告郑州网站维护推广
  • 企业形象成品网站注册公司什么网站
  • 怎样创建网站挣钱全屏网站代码
  • 成都网站建设推荐到访率公司徐州网站制作案例
  • 建网站的程序免费电子商务怎样建立网站的
  • 做好网站如何发布网站建设公司的优势
  • 建设网站是要先建站在备案么中药网站模板
  • 温州专业微网站制作公司做网站推广对电脑有什么要求
  • 申请一个免费的网站空间网站推广的岗位要求
  • 网站建设用模板好吗中小企业有哪些公司名单
  • 徐水区住房和城乡建设局网站51源码
  • 请问大连谁家做网站网站建设费如何账务处理
  • 自己做的网站如何联网湛江网站制作工具
  • 菜鸟做网站金蝶直播
  • c程序设计教学网站怎么做软件开发工程师需要具备的能力
  • python做网站还是数据益阳网站建设益阳
  • 网站修改关键词不收录设一个网站链接为安全怎么做
  • 软件 网站模板各大网站平台发布信息
  • 如何建设备案网站视频教程软文的概念
  • php网站301重定向kaalus.wordpress
  • 帝国cms能建设视频网站吗百度录取线我的wordpress
  • 陕西省建设工程施工许可证查询网站网站会员营销