1 条题解

  • 0
    @ 2025-8-24 21:53:44

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar KALY
    QAQ

    搬运于2025-08-24 21:53:44,当前版本为作者最后更新于2020-02-14 16:25:53,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    看了一下发现大家都是 LCA 做的。

    我这里给大家提供一种使用 Floyd 算法的做法。

    树其实一种特殊的图。

    即没有环路,一定联通,而且有且有只有一个节点没有入度的图。

    那么树上任意两点间的距离可以直接通过最短路算法获得。

    树的深度就是距离根节点最远的那个点的距离。

    树的宽度是节点最多的一层,同一层的节点距离根节点的距离都是相同的,所以也可以直接枚举获得。

    Floyd 算法应该是相当基础的算法,我相信大佬们应该都会。

    代码:

    #include<bits/stdc++.h>
    #define r read()//偷懒
    #define lnf INT_MAX/4
    // INT_MAX 是一个常量定义在 limits.h 头文件中 其值就是字面意思
    #define Min(a,b) ((a)<(b)?(a):(b))//手打min提高效率
    #define Max(a,b) ((a)>(b)?(a):(b))//同上,切记括号千万不能漏
    //STL 中的 max 和 min 速度相当慢 用 if 速度也不及条件表达式
    using namespace std;
    inline int read()//快读不解释
    {
        char c=getchar();
        int x=0,fh=0;
        while(c<'0'||c>'9'){fh|=c=='-';c=getchar();}
        while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
        return fh?-x:x;
    }
    int n=r;
    int a[101][101];//邻接矩阵存图
    int b[100000000];
    int main()
    {
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
               if(i!=j)a[i][j]=lnf;//预处理
        for(int i=1;i<n;i++)
        {
            int x=r,y=r;
            a[x][y]=1;//父亲到孩子距离为1
            a[y][x]=2;//孩子到父亲距离为2
        }
        for(int k=1;k<=n;k++)
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                     a[i][j]=Min(a[i][j],a[i][k]+a[k][j]);//Floyd算法
        int u=r,v=r;
        int maxsum=0,maxd=0,maxn=1;
        for(int i=2;i<=n;i++)
        {
            maxsum=Max(maxsum,a[1][i]);//深度
            b[a[1][i]]++;//同时统计每一层的节点数
            maxn=Max(maxn,a[i][1]);
        }
        for(int i=1;i<=maxn;i++)
            maxd=Max(maxd,b[i]);//宽度
        cout<<maxsum+1<<endl;
        cout<<maxd<<endl;
        cout<<a[u][v]<<endl;//树上距离
        return 0;
    }
    
    • 1

    信息

    ID
    2841
    时间
    1000ms
    内存
    128MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者