记录编号 385453 评测结果 AAAAAAAAAA
题目名称 [HAOI 2009]毛毛虫 最终得分 100
用户昵称 GravatarHeHe 是否通过 通过
代码语言 C++ 运行时间 0.263 s
提交时间 2017-03-21 16:49:31 内存使用 8.61 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5.  
  6. #define MAXN 300010
  7. #define is_num(tmp) (tmp<='9' and tmp>='0')
  8.  
  9. const inline int in(void){
  10. char tmp=getchar();
  11. int res=0;
  12. while(!is_num(tmp))tmp=getchar();
  13. while(is_num(tmp))
  14. res=(res<<1)+(res<<3)+(tmp^48),
  15. tmp=getchar();
  16. return res;
  17. }
  18.  
  19. struct EDGE{
  20. int to, ne;
  21. inline EDGE(){;}
  22. inline EDGE(int a, int b){
  23. to=a, ne=b;
  24. }
  25. };
  26.  
  27. inline void add_edge(int, int);
  28. void dfs(int);
  29.  
  30. EDGE s[MAXN<<1];
  31. bool visit[MAXN];
  32. int cnt;
  33. int head[MAXN], d[MAXN];
  34. int f[MAXN];
  35. int N, M, ans;
  36.  
  37. int main(){
  38. #ifndef LOCAL
  39. freopen("worma.in", "r", stdin);
  40. freopen("worma.out", "w", stdout);
  41. #endif
  42.  
  43. N=in(), M=in();
  44. for(int i=1; i<=M; ++i){
  45. add_edge(in(), in());
  46. }
  47. dfs(1);
  48. printf("%d", ans+1);
  49. return 0;
  50. }
  51.  
  52. inline void add_edge(int fr, int to){
  53. s[++cnt]=EDGE(to, head[fr]), head[fr]=cnt, ++d[fr];
  54. s[++cnt]=EDGE(fr, head[to]), head[to]=cnt, ++d[to];
  55. }
  56.  
  57. void dfs(int now){
  58. visit[now]=true;
  59. int max1 = 0, max2 = 0;
  60. for(int i=head[now], to; i; i=s[i].ne){
  61. to=s[i].to;
  62. if(!visit[to]){
  63. dfs(to);
  64. if(f[to]>max1)max2=max1, max1=f[to];
  65. else if(f[to]>max2)max2=f[to];
  66. }
  67. }
  68. f[now]=max1+d[now]-1;
  69. ans = max(ans, max2 + f[now] + 1);
  70. return ;
  71. }