codevs——T1814 最长链

http://codevs.cn/problem/1814/

时间限制: 1 s

空间限制: 256000 KB

题目等级 : 钻石 Diamond

题解

查看运行结果

题目描述 Description

现给出一棵N个结点二叉树,问这棵二叉树中最长链的长度为多少,保证了1号结点为二叉树的根。

输入描述 Input Description

输入的第1行为包含了一个正整数N,为这棵二叉树的结点数,结点标号由1至N。

接下来N行,这N行中的第i行包含两个正整数l[i], r[i],表示了结点i的左儿子与右儿子编号。如果l[i]为0,表示结点i没有左儿子,同样地,如果r[i]为0则表示没有右儿子。

输出描述 Output Description

输出包括1个正整数,为这棵二叉树的最长链长度。

样例输入 Sample Input

5

2 3

4 5

0 6

0 0

0 0

样例输出 Sample Output

4

数据范围及提示 Data Size & Hint

【样例说明】

  4-2-1-3-6为这棵二叉树中的一条最长链。

【数据规模】

对于10%的数据,有N≤10;

对于40%的数据,有N≤100;

对于50%的数据,有N≤1000;

对于60%的数据,有N≤10000;

对于100%的数据,有N≤100000,且保证了树的深度不超过32768。

【提示】

关于二叉树:

二叉树的递归定义:二叉树要么为空,要么由根结点,左子树,右子树组成。左子树和右子树分别是一棵二叉树。

请注意,有根树和二叉树的三个主要差别:

1. 树的结点个数至少为1,而二叉树的结点个数可以为0;

2. 树中结点的最大度数没有限制,而二叉树结点的最大度数为2;

3. 树的结点无左、右之分,而二叉树的结点有左、右之分。

关于最长链:

最长链为这棵二叉树中一条最长的简单路径,即不经过重复结点的一条路径。可以容易证明,二叉树中最长链的起始、结束结点均为叶子结点。

求了树的直径,不过样例~莫名其妙的A了,可能是数据太水

 1 #include <algorithm>
 2 #include <cstring>
 3 #include <cstdio>
 4 #include <vector>
 5
 6 using namespace std;
 7
 8 const int N(100015);
 9 vector<int>vec[N];
10 int n,lson,rson;
11 int s,t,i,dis[N];
12 bool vis[N];
13
14 void DFS(int x)
15 {
16     for(int i=0;i<vec[x].size();i++)
17         if(!dis[vec[x][i]]) dis[vec[x][i]]=dis[x]+1,DFS(vec[x][i]);
18 }
19
20 int main()
21 {
22     scanf("%d",&n);
23     for(i=1;i<=n;i++)
24     {
25         scanf("%d%d",&lson,&rson);
26         if(lson) vec[i].push_back(lson),vec[lson].push_back(i);
27         if(rson) vec[i].push_back(rson),vec[rson].push_back(i);
28     }
29     DFS(1);
30     for(t=i=1;i<=n;i++) if(dis[i]>dis[t]) t=i;
31     memset(dis,0,sizeof(dis));
32     dis[t]=1; DFS(t);
33     for(s=i=1;i<=n;i++) if(dis[i]>dis[s]) s=i;
34     printf("%d",dis[s]-1);
35     return 0;
36 }
时间: 2024-11-11 00:00:15

codevs——T1814 最长链的相关文章

codevs 1814 最长链

二次联通门 : codevs 1814 最长链 /* codevs 1814 最长链 树形DP 当前点(LQZ)的最大价值由他的 左儿子(HKD) 和 右儿子(SYL)的最大价值转移而来 其余细节乱搞一下就可 我还是水的很开心啦.. */ #include <cstdio> #define Max 100080 inline int max (int a, int b) { return a > b ? a : b; } void read (int &now) { now =

树形DP codevs 1814 最长链

codevs 1814 最长链 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 现给出一棵N个结点二叉树,问这棵二叉树中最长链的长度为多少,保证了1号结点为二叉树的根. 输入描述 Input Description 输入的第1行为包含了一个正整数N,为这棵二叉树的结点数,结点标号由1至N. 接下来N行,这N行中的第i行包含两个正整数l[i], r[i],表示了结点i的左儿子与右儿子编号.如果l[i]为0,表示结点i没有左儿

codevs——1814 最长链

1814 最长链 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 现给出一棵N个结点二叉树,问这棵二叉树中最长链的长度为多少,保证了1号结点为二叉树的根. 输入描述 Input Description 输入的第1行为包含了一个正整数N,为这棵二叉树的结点数,结点标号由1至N. 接下来N行,这N行中的第i行包含两个正整数l[i], r[i],表示了结点i的左儿子与右儿子编号.如果l[i]为0,表示结点i没有左儿子,同样

最长链(codevs 1814)

题目描述 Description 现给出一棵N个结点二叉树,问这棵二叉树中最长链的长度为多少,保证了1号结点为二叉树的根. 输入描述 Input Description 输入的第1行为包含了一个正整数N,为这棵二叉树的结点数,结点标号由1至N. 接下来N行,这N行中的第i行包含两个正整数l[i], r[i],表示了结点i的左儿子与右儿子编号.如果l[i]为0,表示结点i没有左儿子,同样地,如果r[i]为0则表示没有右儿子. 输出描述 Output Description 输出包括1个正整数,为这

最长链

最长链 题目描述 现给出一棵N个结点二叉树,问这棵二叉树中最长链的长度为多少,保证了1号结点为二叉树的根. 输入描述 输入的第1行为包含了一个正整数N,为这棵二叉树的结点数,结点标号由1至N. 接下来N行,这N行中的第i行包含两个正整数l[i], r[i],表示了结点i的左儿子与右儿子编号.如果l[i]为0,表示结点i没有左儿子,同样地,如果r[i]为0则表示没有右儿子. 输出描述 输出包括1个正整数,为这棵二叉树的最长链长度. 样例输入 5 2 3 4 5 0 6 0 0 0 0 样例输出 4

SPOJ LIS2 Another Longest Increasing Subsequence Problem 三维偏序最长链 CDQ分治

Another Longest Increasing Subsequence Problem Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=19929 Description Given a sequence of N pairs of integers, find the length of the longest incre

长链剖分随想

之前写了那么长一篇Blog-现在不如写篇小短文-说一下另一种树链剖分方法--长链剖分的事情.它可以比重链剖分更快地完成一些东西. 树链剖分的原始版本重链剖分非常经典,这里就不从头介绍了. 原本的剖分方法是按照子树大小剖分,与子树点数最多的儿子连成链,所以叫做重链剖分-然后显然就有一个点到根的路径上至多$O(\log n)$条轻边这个性质(因为沿着轻边走,每次子树大小一定小于父亲的一半).有了这个性质就可以做各种路径相关的查询,暴力每次跳到重链开头就好- 而在一些问题里,有这么一种奇妙的剖分方式可

长链非编码RNA(lncRNA)

长链非编码RNA(lncRNA) 转自:http://blog.sina.com.cn/s/blog_909da11301010bkz.html     长链非编码RNA(lncRNA)是一类转录本长度超过200nt的RNA分子,它们并不编码蛋白,而是以RNA的形式在多种层面上(表观遗传调控.转录调控以及转录后调控等)调控基因的表达水平. lncRNA起初被认为是基因组转录的“噪音”,是RNA聚合酶II转录的副产物,不具有生物学功能.然而,近年来的研究表明,lncRNA参与了X染色体沉默,基因组

VIJOS1107 求树的最长链

vijos1107环游大同80天 学习了一下求树的最长链的方法 最简单的思路就是两次dfs 两次dfs分别有什么用呢? 第一次dfs,求出某个任意的点能到达的最远的点 第二次dfs,从所搜到的最远的点倒搜回去. 为什么需要两次呢? 其实很容易想通第一遍dfs的起始点或许并不是最长链的起点 从最远的点倒搜到的最长的链就是所求的解 (因为最长链一定经过这个最远的点啊... 这里注意题目表述: 假设任意的两个风景点都有且仅有一条路径(无回路)相连.显然,任意一个风景点都可以作为游览路线的起点或者终点.