题面

原题

Solution

显然可以发现这道题目可以树形Dp?
那么我们也可以考虑别的东西比如说直径?
因为我们知道直径是一条链?
所以就可以抠出来这一条链然后再加?
你问我这样子为什么过?
因为你考虑如果存在一个别的不属于直径的链,显然不能使答案变长?
于是就可以这么愉快地做了?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<iostream>
#include<queue>
#define ll long long
#define file(a) freopen(a".in","r",stdin)//;freopen(a".out","w",stdout)
using namespace std;
inline int gi(){int sum=0,f=1;char ch=getchar();while(ch>'9' || ch<'0'){if(ch=='-')f=-f;ch=getchar();}while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}return f*sum;
}
inline ll gl(){ll sum=0,f=1;char ch=getchar();while(ch>'9' || ch<'0'){if(ch=='-')f=-f;ch=getchar();}while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}return f*sum;
}
const int N=300010;
int to[N<<1],nxt[N<<1],front[N],cnt,dp[N];
void Add(int u,int v){to[++cnt]=v;nxt[cnt]=front[u];front[u]=cnt;
}
int MaxAns=0,id,in[N];
void dfs(int u,int fa,int sum){if(MaxAns<sum){MaxAns=sum;id=u;}for(int i=front[u];i;i=nxt[i])if(to[i]!=fa)dfs(to[i],u,sum+in[u]);
}
int main(){int i,j,n,m,k;n=gi();m=gi();memset(in,-1,sizeof(in));for(i=1;i<=m;i++){int u=gi(),v=gi();Add(u,v);Add(v,u);in[u]++;in[v]++;}dfs(1,1,0);dfs(id,id,in[id]);printf("%d\n",MaxAns+2);return 0;
}

转载于:https://www.cnblogs.com/cjgjh/p/9846188.html

[HAOI2009]毛毛虫(树的直径)相关推荐

  1. P3174 [HAOI2009]毛毛虫(树形dp)

    P3174 [HAOI2009]毛毛虫 题目描述 对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大.例如下图左边的树(图 1 )抽出一部分就变成了右边 ...

  2. [51nod] 1766树上的最远点对 树的直径 树剖LCA+ST表静态查询

    题意: 给你一棵带权树,q次查询,每次给出两个区间,[l1,r1][l2,r2][l_1,r_1] [l_2,r_2][l1​,r1​][l2​,r2​]从这两个区间中分别选择两个数字,使得这两个点的 ...

  3. 小A与欧拉路(牛客-树的直径)

    题解: 欧拉路:从图中任意一个点开始到图中任意一个点结束的路径,并且图中每条边只通过恰好一次 问你走完这树上所有的点最短路径是什么. 因为树是没有环的,所以你走到叶子结点的时候需要往回走,也就是再走一 ...

  4. luogu P4408 [NOI2003]逃学的小孩(树的直径)

    整理的算法模板合集: ACM模板 看了半天的题原来没有告诉你三个点的坐标,不然直接跑最短路即可.要求最长的时间,所以我们要自己找到三个点,而在树中最长的路径也就是树的直径.那么本题就可以简化为:在一棵 ...

  5. 模板 - 树上问题(树的直径、动态查询树的直径、树的重心)

    整理的算法模板合集: ACM模板 目录 一.树的直径 树形DP 两次DFS / BFS(找到直径的两个端点) 二.动态修改树的边权并求每个时刻的直径(线段树) 三.树的重心 一.树的直径 树的直径满足 ...

  6. 【树的直径】解题报告: luogu P3629 [APIO2010]巡逻(树的直径,位运算成对变换,思维)

    题目链接:P3629 [APIO2010]巡逻 首先看题,从1号结点开始,全部遍历并回到1号结点会恰好经过所有的边两次,这样总长度为 2∗(n−1)2*(n-1)2∗(n−1). 那么如果建立一条路以 ...

  7. 0x63.图论 - 树的直径与最近公共祖先

    目录 一.树的直径(Diameter) 1.树形DP求树的直径 2.两次BFS/DFS求树的直径 1.POJ 1985.Cow Marathon(DFS求树的直径模板题) 2.AcWing 350. ...

  8. [Bzoj2282]消防(二分答案+树的直径)

    Description 某个国家有n个城市,这n个城市中任意两个都连通且有唯一一条路径,每条连通两个城市的道路的长度为zi(zi<=1000). 这个国家的人对火焰有超越宇宙的热情,所以这个国家 ...

  9. 树的直径【p3629】[APIO2010]巡逻

    Description 在一个地区中有 n 个村庄,编号为 1, 2, ..., n.有 n – 1 条道路连接着这些村 庄,每条道路刚好连接两个村庄,从任何一个村庄,都可以通过这些道路到达其 他任一 ...

  10. Codeforces 337D Book of Evil:树的直径【结论】

    题目链接:http://codeforces.com/problemset/problem/337/D 题意: 给你一棵树,n个节点. 如果一个节点处放着"罪恶之书",那么它会影响 ...

最新文章

  1. Harris算子的运用 用于图像配准
  2. 理解javascript中的回调函数(callback)【转】
  3. 刷道谷歌泄漏的面试题:面试官想从中考察你什么?
  4. Java 怎么 get char_Java KeyCharacterMap.getDeadChar方法代码示例
  5. c#sort升序还是降序_c# List的sort排序方法详解
  6. php返回一个变量,PHP从另一个文件获取变量
  7. 【编译原理】入门总结
  8. LeetCode 5380. 数组中的字符串匹配
  9. 网易博客技巧(表格的高级样式)
  10. mob sdk vue 短信验证_如何快速集成短信验证码API[图文教程]
  11. 服务器系统多用户怎么解决,服务器如何设置多用户登录
  12. Ant--基于java的build工具
  13. 阿里云云计算 22 VPC连接
  14. 快速突破算法之位运算
  15. 计算机组成原理统一试卷,计算机组成原理试卷(含答案).doc
  16. 模糊数学(一):模糊集及其表示
  17. 用户画像 客户基本属性表
  18. 电脑调分辨率黑屏了怎么办_调显示器分辨率黑屏怎么办
  19. 市场营销学9——产品策略
  20. java espresso车架_Espresso UI自动化测试框架

热门文章

  1. 起风了用计算机打,《起风了》计算机简谱
  2. 一份关于webpack2和模块打包的新手指南(一)
  3. 如何在Mac电脑上打开终端
  4. 微信小程序上传代码, Error: 分包大小超过限制,main package source size 4732KB exceed max limit 2MB
  5. my live work / interview / renshebu / gongxinbu
  6. Ps快捷键及基础知识
  7. 详解自动驾驶安全软件开发流程
  8. 【深度学习】【ICLR2019】DARTS代码解读
  9. PS用套索工具抠图,并修改背景颜色
  10. Python实战(07):使用selenium刷访问量