hihocoder1224赛车(树的深度相关)
来源:互联网 发布:php 获取网页内容 编辑:程序博客网 时间:2024/06/10 04:04
题目连接:传送门
题意:
给你一棵树,然后加一条边,加的这条边不能使树成环,求加边后从根节点出发的最长的路径。
分析:
如果可以加边的话那么这两个链一定是某个节点的最长链与次长链,然后一边dfs处理出所有的节点的深度,然后再一遍dfs求出所有点的最长链的长度与次长链的长度,然后枚举节点就可以了。
代码如下:
#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>#include <vector>using namespace std;const int maxn = 1e5+10;vector<int > vc[maxn];int dept[maxn];int mmax;void init(){ for(int i=0;i<maxn;i++){ vc[i].clear(); } mmax=0;}void dfs(int u,int dep){ dept[u]=++dep; mmax = max(dep,mmax); for(int i=0;i<vc[u].size();i++){ int v=vc[u][i]; dfs(v,dep); }}int m[maxn][2];int slove(int u){ if(m[u][0]) return m[u][0]; int m1=dept[u],m2=0; for(int i=0;i<vc[u].size();i++){ int tmp = slove(vc[u][i]); if(tmp<=m1&&tmp>m2&&m1!=dept[u]) m2=tmp; if(tmp>m1){ if(m1!=dept[u]) m2=m1; m1=tmp; } } m[u][0]=m1; m[u][1]=m2; return m1;}int main(){ int n; while(~scanf("%d",&n)){ init(); for(int i=0;i<n-1;i++){ int u,v; scanf("%d%d",&u,&v); vc[u].push_back(v); } memset(m,0,sizeof(m)); dfs(1,0); slove(1); int ans = 0; for(int i=1;i<=n;i++){ if(m[i][1]) ans=max(ans,m[i][0]-1+m[i][1]-dept[i]); } if(!ans) printf("%d\n",mmax-1); else printf("%d\n",ans); } return 0;}/***101 22 33 73 88 102 44 55 66 9***/
0 0
- hihocoder1224赛车(树的深度相关)
- hihocoder1224
- 赛车游戏中赛车的物理建模
- 二叉树的深度相关问题
- 疯狂的赛车下载
- 谁是最好的赛车
- 赛车游戏的悖论
- 赛车
- 赛车
- 赛车
- hihoCoder挑战赛14 题目2 : 赛车 树的性质
- 深度学习相关的链接
- 深度学习相关的资料
- 真实赛车的驾驶方法
- 赛车游戏的漂移技术
- UVA12661 有趣的赛车比赛
- 机器学习、深度学习的相关资料
- 与深度学习相关的框架Project
- Poj2429 inverse of LCM&GCD
- JSP技术(一)
- 道歉还是作秀?余佳文现象背后的冷思考
- 新浪微博第三方Android客户端
- 零基础学python-10.1 序列赋值高级应用
- hihocoder1224赛车(树的深度相关)
- CA解扰
- 防火墙、Iptables、netfilter/iptables、NAT 概述
- 1.介绍shiro框架类关系图
- rust用struct保存特定trait的引用
- 【spring框架】(三)面向切面编程(AOP)
- HDU——1253 胜利大逃亡
- 常用位操作
- 安装OSB之安装OEPE出错INST-07248