(파일 IO) : 입력 : tree.in 출력 : tree.out의
시간 제한 : 1000 MS 공간 제약 : 13만1천72킬로바이트의 특정 제한
고토 ProblemSet
제목 설명
맛 맛이 최근 매우 나무에 관심이, 무슨 나무입니까? 나무가있다
포인트
제 비 고리 통신 가장자리는 무향 그래프를 형성한다.
금년에
절강 성 팀 재판 맛의 풍미는 그녀가 나무 몇 가지 조사 및 사고에 착수, 그래서 질문 (트리 먼 지점입니다) 가장 긴 체인 트리에서 발견.
높은 트리의 루트 노드의 난 때 때 연구 기간 동안 풍미 맛은 뿌리가 나무에 대해 알고 싶어. 소위 트리 높이 즉, 루트 노드로부터 리프 노드 먼의 루트 노드에서 시작되는 입출력 참조 샘플의 총 개수
.
맛의 맛은 지금 몇 가지, 귀찮게 생각을 계속, 그녀는이 문제를 해결하는 데 도움을 요청하지 않으려했다.
입력
라는 파일에
총
라인. 첫 번째 라인은 양의 정수
트리의 노드의 수를 나타냅니다. 첫 번째
N 행을 행하기 위해, 각 행은 두 개의 공간으로 분리 양수
및
나타내고
및
연결된 쪽.
출력
출력 파일
共
노드 i가 루트 일 때 로우는 i 번째 행이 높은 트리를 나타낸다.
입력 샘플
[1]의 입력 샘플
. (3)
1 2
2 3
입력 샘플 [2]
. 4
. 1 4
2 4
. 3 (4)
샘플 출력
[출력 1] 샘플
. 3
(2)
. (3)
[2] 샘플 출력
. (3)
. (3)
. (3)
(2)
데이터 범위 제한
에 대한
데이터 %은 할
.
용
데이터 %은 할
.
용
데이터 %은 할
신속한
문제 해결 아이디어는
당신이 사용할 수있는
이 질문을
코드
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
long long n,a1,b,l,head[1010],q[10100],v[10100],h,t,ans,dis[10010];
struct c{
int x,next;
}a[10010];
void add(int x,int y){
a[++l].x=y;
a[l].next=head[x];
head[x]=l;
}
void bfs(int s)
{
for(int i=1;i<=1010;i++)
dis[i]=2147483647;
memset(v, 0, sizeof(v));
dis[s]=1;
v[s]=1;
q[1]=s;
h=0,t=1;
while(h<t)
{
h++;
int xx=q[h];
v[xx]=0;
for(int i=head[xx];i;i=a[i].next)
if(dis[xx]+1<dis[a[i].x])
{
dis[a[i].x]=dis[xx]+1;
if(!v[a[i].x])
{
v[a[i].x]=1;
t++;
q[t]=a[i].x;
}
}
}
}
int main(){
freopen("tree.in","r",stdin);
freopen("tree.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n-1;i++)
{
scanf("%d%d",&a1,&b);
add(a1,b);
add(b,a1);
}
for(int i=1;i<=n;i++)
{
bfs(i);
for(int j=1;j<=n;j++)
if(dis[j]>ans&&dis[j]!=2147483647)
ans=dis[j];
printf("%lld\n",ans);
ans=0;
}
}