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

扬州seo招聘aso优化服务平台

扬州seo招聘,aso优化服务平台,做网站用的代码,阿里云做网站吗B4016 树的直径 - 洛谷 题目大意: 给定一棵 n 个结点的树,树没有边权。请求出树的直径是多少,即树上的最长路径长度是多少。 思路: 树形 d p dp dp 求树的直径 定义 d [ x ] d[x] d[x] 表示以 x x x 节点出发走向 x x x 的…

B4016 树的直径 - 洛谷

题目大意:

给定一棵 n 个结点的树,树没有边权。请求出树的直径是多少,即树上的最长路径长度是多少。

思路:

  • 树形 d p dp dp 求树的直径

定义 d [ x ] d[x] d[x] 表示以 x x x 节点出发走向 x x x 的子树,能到达的最远距离,

接下来只需要考虑对每个 x x x 节点求出 经过 x x x 节点的最长链即可,

定义 f [ x ] f[x] f[x] 表示经过 x x x 节点的最长链,

考虑转移, d [ x ] d[x] d[x] 只需先 d f s dfs dfs 到叶子节点,再由下向上更新即可

void dfs(int u,int fa){for(auto x:g[u]){if(x==fa) continue;dfs(x,u);d[u]=max(d[u],d[x]+1);}
}

f [ x ] f[x] f[x] 只需考虑 x x x 节点能够到达的 两个最远节点 y i y_i yi d [ y i ] d[y_i] d[yi] 即可,

而在更新 d [ x ] d[x] d[x] 的时候,每次都会保存一个最大的节点,因此更新 f [ x ] f[x] f[x] 时,只需考虑 d [ x ] d[x] d[x] 中保存最大的与要更新的路径求 m a x max max 即可

void dfs(int u,int fa){for(auto x:g[u]){if(x==fa) continue;dfs(x,u);f[u]=max(f[u],d[u]+d[x]+1);d[u]=max(d[u],d[x]+1);}	
}
  • 两边 d f s dfs dfs 贪心求直径

从任意一个节点出发, d f s dfs dfs 遍历到这个点最远能够到达的点,这个点一定是直径上的点,如果不是直径上的点,那么一定存在一个点比这个点更优

第二次以直径上的点 d f s dfs dfs 求一遍最大值即可

void dfs(int u,int fa){for(auto x:g[u]){if(x==fa) continue;d[x]=d[u]+1;if(d[x]>ans){ans=d[x];pos=x;}dfs(x,u);}	
}

代码1(树形 d p dp dp ):

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define PII pair<int,int>
#define lowbit(x) x&-x
#define ALL(x) x.begin(),x.end()const int mod = 1e9 + 7;
const int N = 1e5+10;int d[N],f[N];
int n;
vector<int> g[N];void dfs(int u,int fa) {for(auto x:g[u]){if(x==fa) continue;dfs(x,u);f[u]=max(f[u],d[u]+d[x]+1);d[u]=max(d[u],d[x]+1);}
}void solve() {int n;cin>>n;for(int i=2;i<=n;i++){int u,v;cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}dfs(1,0);int ans=0;for(int i=1;i<=n;i++){ans=max(ans,f[i]);}cout<<ans; 
}signed main() {std::ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int T = 1;
//	cin >> T;while (T--) {solve();}return 0;
}

代码2(贪心 d f s dfs dfs ):

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define PII pair<int,int>
#define lowbit(x) x&-x
#define ALL(x) x.begin(),x.end()const int mod = 1e9 + 7;
const int N = 1e5+10;int d[N],f[N];
int n;
vector<int> g[N];
int ans,pos;void dfs(int u,int fa) {for(auto x:g[u]){if(x==fa) continue;d[x]=d[u]+1;if(d[x]>ans){ans=d[x];pos=x;}dfs(x,u);}
}void solve() {int n;cin>>n;for(int i=2;i<=n;i++){int u,v;cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}d[1]=0;dfs(1,0);d[pos]=0;ans=0;dfs(pos,0);cout<<ans; 
}signed main() {std::ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int T = 1;
//	cin >> T;while (T--) {solve();}return 0;
}
http://www.dtcms.com/wzjs/472357.html

相关文章:

  • 外贸模板建站国外b站浏览器
  • 花钱做的网站推广被骗百度点击器下载
  • 软件下载网站如何履行安全管理义务免费seo快速排名系统
  • 镇江专业网站制作网站优化排名怎么做
  • 做签证宾馆订单用啥网站百度网游排行榜
  • 最好的编程培训学校关键词优化如何做
  • 大气网站模板下载湖南seo排名
  • b2b电子商务网站怎么做西安网站建设比较好的公司
  • 什么是门户网站广告免费b站在线观看人数在哪里找到
  • 做网站要学什么长春网站关键词推广
  • ip查询网站备案查询系统seo网络推广经理招聘
  • 产权交易中心网站建设的原因南宁百度seo建议
  • 建平台网站软文素材
  • 网站服务器怎么做2023年8月疫情爆发
  • 私彩网站建设百度搜索页面
  • xp 做网站服务器西安疫情最新数据消息5分钟前
  • 初中网站建设精准营销方式有哪些
  • 做网站会犯法吗爱站网ip反查域名
  • 济南商城网站制作无锡百度公司王东
  • 如何做房产公司网站如何网上免费做推广
  • 潍坊网站建设方案推广百度指数
  • 广东省网站建设公司排名清远seo
  • 东莞做网站服务商网站优化外包价格
  • 想找人做网站 要怎么选择国内最开放的浏览器
  • 建设网站怎么收费百度导航怎么下载
  • 贵阳哪家网站建设公司好网站收录提交工具
  • 做菠菜网站好赚吗便宜的seo网络营销推广
  • 龙港做网页网站制作外国网站的浏览器
  • wordpress启用静态seo案例分析方案
  • 温州网站建设怎么样google play商店