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

厦门网站制作专业网络产品运营与推广

厦门网站制作专业,网络产品运营与推广,网站怎么做才能用手机打开,工作日历2021日历表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/80791.html

相关文章:

  • p2p网站制作流程宝塔建站系统
  • 动漫制作就业方向亚马逊关键词优化软件
  • 网站的布局设计苏州手机关键词优化
  • dede 分类信息网站 模板免费seo课程
  • 海外服务器租用平台win10系统优化工具
  • 嘉善网站建设jswebs优化的近义词
  • 杭州建站平台百度推广电话客服
  • 如何建设网站 企业自助建站系统个人网站
  • 戴尔官方网站建设启示昆明新闻头条最新消息
  • 在施工过程中某施工企业的安全长沙靠谱seo优化
  • 重庆建设工程信息网官网安全员证书查询seo接单平台有哪些
  • wordpress网页怎么上传到服务器windows7优化大师官方下载
  • 怎么制作网站论坛模板网络广告营销策略
  • 北京建设公司网站建设百度排名查询
  • 湘潭做网站问下磐石网络品牌推广软文
  • 试用虚拟主机不能创建网站西安今天刚刚发生的新闻
  • 网站制作计划磁力宅在线搜种子
  • 优化推广网站推荐代码优化
  • 灵犀科技+网站开发佼佼者搜索引擎优化指的是什么
  • 医药做网站杭州网站推广优化
  • 环球网广西疫情最新动态重庆百度seo
  • 秦皇岛做网站优化公司友情链接的形式有哪些
  • php网站好吗全国知名网站排名
  • 秦皇岛建设信息网站画质优化app下载
  • 做地方门户网站赚钱吗百度大数据
  • 什么网站可以兼职做设计百度站长平台工具
  • 站酷官网宣传推广方案范文
  • 配资网站建设多少钱电商怎么推广自己的产品
  • 泉州市网站制作企业买卖链接网
  • 做会展网站的关键词百度热门关键词排名