[HAOI2009] 毛毛虫 - 树的直径

Posted mollnn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[HAOI2009] 毛毛虫 - 树的直径相关的知识,希望对你有一定的参考价值。

在一棵树中,一条链及与它直接相连的所有边的集合称作一个毛毛虫,这个子图中的点数称作这个毛毛虫的大小。求一棵树中最大的毛毛虫。(Nleq 3 imes10^5)

Solution

设每个点的权值为 (deg_i-1),然后求最长路即可,答案就是 (ans+2)

#include <bits/stdc++.h>
using namespace std;

const int N = 300005;

vector <int> g[N];
int n,m,vis[N],a[N],f[N],ans;

void dfs(int p) {
    vis[p]=1;
    f[p]+=a[p];
    for(int q:g[p]) {
        if(vis[q]) continue;
        f[q]=f[p];
        dfs(q);
    }
}

signed main() {
    ios::sync_with_stdio(false);
    cin>>n>>m;
    for(int i=1;i<=m;i++) {
        int u,v;
        cin>>u>>v;
        g[u].push_back(v);
        g[v].push_back(u);
        a[u]++;
        a[v]++;
    }
    for(int i=1;i<=n;i++) a[i]--;
    dfs(1);
    int mx=0;
    for(int i=1;i<=n;i++) if(f[mx]<f[i]) mx=i;
    memset(vis,0,sizeof vis);
    memset(f,0,sizeof f);
    dfs(mx);
    int my=0;
    for(int i=1;i<=n;i++) if(f[my]<f[i]) my=i;
    cout<<f[my]+2<<endl;
}

以上是关于[HAOI2009] 毛毛虫 - 树的直径的主要内容,如果未能解决你的问题,请参考以下文章

Luogu P3174 [HAOI2009]毛毛虫

luogu P3174 [HAOI2009] 毛毛虫 树dp

[HAOI2009]毛毛虫(树形dp)

[HAOI2009]毛毛虫

P3174 [HAOI2009]毛毛虫

P3174 [HAOI2009]毛毛虫