记录编号 53756 评测结果 AAAAAAAAAA
题目名称 [HAOI 2009]毛毛虫 最终得分 100
用户昵称 Gravatarfeng 是否通过 通过
代码语言 C++ 运行时间 1.020 s
提交时间 2013-03-05 11:09:48 内存使用 12.14 MiB
显示代码纯文本
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<iostream>
using namespace std;
struct node{
	int nex;
}a[310000];
struct edge{
	int y,nex;
}e[620000];
int d[310000][2];
int f[310000];
int tot[310000];
int top[310000];
int n,m,p,size;
void add(int x,int y){
	p++;
	e[p].nex=a[x].nex;
	a[x].nex=p;
	e[p].y=y;
}
void init(){
	freopen("worma.in","r",stdin);
	freopen("worma.out","w",stdout);
	scanf("%d%d",&n,&m);
	p=0;
	int x,y;
	for (int i=1;i<=m;i++){
		scanf("%d%d",&x,&y);
		add(x,y);
		add(y,x);
	}
	
}
void dfs(int s){
	int t=a[s].nex;
	while (t!=0){
		if (e[t].y!=f[s]){
			tot[s]++;
			f[e[t].y]=s;
			dfs(e[t].y);
		}
		t=e[t].nex;
	}
		top[++size]=s;
}
void work(){
	memset(f,false,sizeof(f));
	dfs(1);
	int re=0;
	for (int k=1;k<=size;k++){
		int s=top[k];
		d[s][0]=d[s][1]=-0x7fffffff;
		int t=a[s].nex;
		while (t!=0){
			if (e[t].y!=f[s]){
				int nd;
				if (tot[e[t].y]) nd=d[e[t].y][0]+tot[e[t].y];
				else nd=d[e[t].y][0]+1;
				if(nd>d[s][0]){
					d[s][1]=d[s][0];
					d[s][0]=nd;
				}else if (nd>d[s][1]){
					d[s][1]=nd;
				}
			}
			t=e[t].nex;
		}
		if (tot[s]==0) d[s][0]=0;
		else if (tot[s]>=2){
			int nre=d[s][0]+d[s][1]+tot[s]-2+(s!=1);
			if (nre>re)
				re=nre;
		}
	}
	printf("%d",re+1);
}
int main(){
		init();
		work();
		return 0;
		
}