记录编号 |
425302 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[HAOI 2009]毛毛虫 |
最终得分 |
100 |
用户昵称 |
Troywar |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.362 s |
提交时间 |
2017-07-15 07:46:38 |
内存使用 |
9.75 MiB |
显示代码纯文本
#include<cstdio>
#include<iostream>
const int N=300050;
inline int max(int a,int b){return a>b?a:b;}
struct edges{
int v;edges *last;
}edge[N<<1],*head[N];int cnt;
inline void push(int u,int v){
edge[++cnt].v=v;edge[cnt].last=head[u];
head[u]=edge+cnt;
}
int n,m;
int f[N],g[N],son[N];
bool vis[N];
int ans;
void dp(int x){
vis[x]=true;
for(edges *i=head[x];i;i=i->last){
if(!vis[i->v]){
dp(i->v);son[x]++;
g[x]=max(g[x],f[i->v]);
if(g[x]>f[x]) std::swap(g[x],f[x]);
}
}//printf("f[%d]=%d g=%d son=%d\n",x,f[x],g[x],son[x]);
if(son[x]==0) f[x]=1;
else f[x]+=son[x];
if(g[x]) g[x]--;
if(x!=1) g[x]++;
ans=max(ans,f[x]+g[x]);
//printf("f[%d]=%d g=%d son=%d\n",x,f[x],g[x],son[x]);
}
int main(){
freopen("worma.in","r",stdin);
freopen("worma.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1,u,v;i<=m;i++){
scanf("%d%d",&u,&v);
push(u,v);push(v,u);
}
dp(1);
printf("%d",ans);
}
/*
13 12
1 2
1 5
1 6
3 2
4 2
5 7
5 8
7 9
7 10
7 11
8 12
8 13
*/