zcmu1369 : 그래프 이론 (나무의 지름 구하기)

제목 링크 : https://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=1369

이야기

N 개의 노드가있는 나무가 주어지면이 나무에서 가장 먼 두 지점 사이의 거리 (나무의 지름)를 찾습니다. 트리의 노드 수 범위는 0- (N-1)입니다. 인접한 모든 노드 사이의 거리는 1입니다.

아이디어

먼저 임의의 지점을 사용하여 루트 노드에 대한 트리를 만들고 dfs를 실행합니다. 0을 취한 다음 가장 깊은 노드 t를 취한 다음 t를 루트로 사용하여 트리를 만들고 dfs를 실행합니다. 최대 깊이는 직경입니다. 나무의.

ac 코드

#include<bits/stdc++.h>
using namespace std;
#define ll long long
vector<int> v[105];
int ans, mx;
void dfs(int s, int fa, int dep){
    if(dep > ans){
        ans = dep;
        mx = s;
    }
    for(int i = 0; i < v[s].size(); i ++){
        int t = v[s][i];
        if(t == fa) continue;
        dfs(t, s, dep + 1);
    }
}
int main(){
    int n;
    while(~scanf("%d", &n)){
        for(int i = 0; i < n; i ++) v[i].clear();
        for(int i = 1; i < n; i ++){
            int x, y;
            scanf("%d%d", &x, &y);
            v[x].push_back(y);
            v[y].push_back(x);
        }
        ans = 0, mx = 0;
        dfs(0, -1, 0);
        ans = 0;
        dfs(mx, -1, 0);
        printf("%d\n", ans);
    }
    return 0;
}

 

추천

출처blog.csdn.net/weixin_43911947/article/details/113404667