【模板】树的直径

    xiaoxiao2025-11-04  3

    树的直径:

    树上任意两点的距离的最大值。

    求法:

    通过两次bfs即可求出树的直径

    模板:

    /* 树的直径: * 使用前dis,G都要初始化 * 复杂度:O(n) */ #define MAXN 105 vector<int> G[MAXN]; int n,m; int dis[MAXN]; int bfs(int u) { queue<int> que; que.push(u); dis[u]=0; int Max=0,Maxi=1; while(!que.empty()) { int f=que.front(); que.pop(); if(dis[f]>Max) Maxi=f; for(int i=0; i<G[f].size(); i++) { int to=G[f][i]; if(dis[to]==-1) que.push(to),dis[to]=dis[f]+1; } } return Maxi; } int main() { while(~scanf("%d",&n)) { for(int j=0; j<MAXN; j++) G[j].clear(); for(int j=1; j<n; j++) { int u,v; scanf("%d%d",&u,&v); G[u].push_back(v); G[v].push_back(u); } memset(dis,-1,sizeof dis); int p=bfs(1); memset(dis,-1,sizeof dis); int q=bfs(p); int ans=dis[q]; printf("%d\n",ans); } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-1303827.html
    最新回复(0)