最便宜的视频网站建设营销型公司网站
2026/2/9 16:23:51 网站建设 项目流程
最便宜的视频网站建设,营销型公司网站,视频软件制作app,网页美工设计课程标准树 需要说吗#xff1f; 直径 直径为树上一条边权和最长的简单路径#xff0c;以下是直径的一些常用性质#xff1a; 树的直径不一定唯一树的直径的端点一定是度数为1的点若直径有数条#xff0c;那么所有直径交汇于至少一点树上任一点距离其最远的点一定是直径的两个端点之…树需要说吗直径直径为树上一条边权和最长的简单路径以下是直径的一些常用性质树的直径不一定唯一树的直径的端点一定是度数为1的点若直径有数条那么所有直径交汇于至少一点树上任一点距离其最远的点一定是直径的两个端点之一在叶子节点处增加或删除一条边直径至多增减1边权为负数除外给定2棵树添加一条边连接两棵树新的树的直径至少为max((d11)/2(d21)/2w,d1,d2)具体实现方法为两遍DFS或BFS第一次从任一点出发找到离该点最远的点x然后再调一次函数找到离x最远的点ySx-y就是直径的长度。知道了这些相信你一定可以做出模板题了B4016 树的直径模板参考代码注释即可。#includebits/stdc.husingnamespacestd;vectorintE[100005];intans0,X,Y;voiddfs(intx,intfa,intid,intsum){if(sumans){//如果目前的距离比原来更好就更新//等于为什么要更新呢这是因为第二次深搜时ans没有清零或者清零也行//可能第二次深搜答案刚好等于第一次深搜的答案于是y就没有更新最好加个等于号anssum;if(id1){//第一次深搜Xx;}else{Yx;}}for(inti0;iE[x].size();i){intvE[x][i];if(vfa)continue;dfs(v,x,id,sum1);//距离加一}}intmain(){intn;cinn;for(inti1;in;i){intu,v;cinuv;E[u].push_back(v);E[v].push_back(u);}dfs(1,0,1,0);//第一次从任一点出发dfs(X,0,2,0);//第二次从x点出发coutans;return0;}CF1404B Tree Tag看题可得知题意alice和bob依次在一棵树上轮流移动移动da和db的距离问alice能否追到bob。首先初始时如果它们之间的距离比da小那么alice必胜因为她先手距离过小时可以直接抓到。就比如你要抓博尔特贴脸抓他还没开始跑你一伸手就抓到他了。否则接着alice考虑最优策略跑到直径的中间位置这样她距离所有点最近这样如果直径的一半向上取整小于等于da那么alice必胜因为这样无论bob跑到哪alice抓一下就抓到了。就比如你要抓博尔特在厕所里面抓博尔特无论跑到哪你都一定抓得到。再否则不行那么alice考虑最后的最优策略把bob逼到叶子节点去假设bob已经到叶子节点了他还要脱离的话就得一次跳过alice的捕捉范围也就是说要bob胜必须dbda*2否则alice胜。就比如你要抓博尔特在死胡同里抓博尔特跑到最里面除非从你头上跳过去否则你都一定抓得到。#includebits/stdc.husingnamespacestd;vectorintE[100005];intans0,X,dis[100005];voiddfs(intx,intfa,intsum){//找直径长度dis[x]sum;if(sumans){anssum;Xx;}for(inti0;iE[x].size();i){intvE[x][i];if(vfa)continue;dfs(v,x,sum1);}}intmain(){intt;cint;while(t--){memset(dis,0,sizeofdis);ansX0;intn,a,b,da,db;cinnabdadb;for(inti1;in;i)E[i].clear();for(inti1;in;i){intu,v;cinuv;E[u].push_back(v);E[v].push_back(u);}dfs(a,0,0);intggydis[b];dfs(X,0,0);if(ggyda||dbda*2||(ans1)/2da){coutAliceendl;}else{coutBobendl;}}return0;}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询