求树的直径。

两遍\(dfs\)就好了。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <stack>
const int maxn = 10000;
const int maxm = 10000; using namespace std; int to[(maxn + maxm) * 2 + 10];
int nex[(maxn + maxm) * 2 + 10];
int head[maxn + maxm + 10], cnt = 0; void addEdge(int a, int b)
{
to[cnt] = b; nex[cnt] = head[a]; head[a] = cnt++;
to[cnt] = a; nex[cnt] = head[b]; head[b] = cnt++;
} int ans, depth; void dfs(int x, int f, int d)
{
if (d > depth)
ans = x, depth = d;
for (int i = head[x]; i != -1; i = nex[i])
{
int l = to[i];
if (l != f)
dfs(l, x, d + 1);
}
} int main()
{
int n, m;
scanf("%d%d", &n, &m); memset(head, -1, sizeof(head)); for (int i = 2, temp; i <= n; i++)
{
scanf("%d", &temp);
addEdge(i, temp);
} for (int i = 1, temp; i <= m; i++)
{
scanf("%d", &temp);
addEdge(i + n, temp);
} ans = depth = -1;
dfs(1, 1, 0); depth = -1;
dfs(ans, ans, 0); printf("%d\n", depth); return 0;
}

最新文章

  1. Dapper where Id in的解决方案
  2. CentOS下Hadoop-2.2.0集群安装配置
  3. Dojo动画原理解析
  4. Codeforce 493c
  5. jquery常用正则表达式
  6. jquery用ajax方式从后台获取json数据,将内容填充到下拉列表。
  7. IOS中 如何去除Tabview里面cell之间的下划线
  8. lucene和egg项目的异同点
  9. NSURLConnection、NSURLSession
  10. Android:控件ListView列表项与适配器结合使用
  11. spring mvc controller json数据
  12. X86在逻辑地址、线性地址、理解虚拟地址和物理地址
  13. SharePoint 2013 InfoPath 无法保存下列表单
  14. chrome正确的打开方式
  15. Jmeter下进行ip伪造
  16. Android蓝牙通信功能开发
  17. Java考试题之五
  18. Java 学习笔记(2)——基本语句、控制结构
  19. 20155338 2016-2017-2《Java程序设计》第1周学习总结
  20. IIS解决上传文件大小限制

热门文章

  1. 投票通过,PHP 8 确认引入 Union Types 2.0
  2. Vue——watch监听对象,监听嵌套多次的对象属性
  3. MySQL8.0 新特性 Hash Join
  4. http_web_cache
  5. OSI层次模型
  6. [ch04-02] 用梯度下降法解决线性回归问题
  7. 【前端】之HTML5基础知识
  8. Docker 更换国内的Hub源
  9. ASI中POST请求和文件下载
  10. 一句话总结flux,以及我们为何需要flux