• 树的直径(两个bfs)


    题目链接:https://cn.vjudge.net/problem/POJ-2631

    树的直径:树中的最长链

    具体思路:随便找一个点bfs,然后找到最长的链,然后再以找到的点作为起点进行bfs,然后找到的最长的链就是树的直径。

    AC代码:

    #include<iostream>
    #include<stack>
    #include<iomanip>
    #include<queue>
    #include<iomanip>
    #include<vector>
    #include<map>
    #include<stdio.h>
    #include<cmath>
    #include<algorithm>
    #include<cstring>
    #include<string>
    using namespace std;
    # define ll long long
    # define inf 0x3f3f3f3f
    # define maxn 10000+100
    struct node
    {
        int to;
        int cost;
        int nex;
    } edge[maxn];
    int head[maxn],num;
    int dis[maxn];
    int vis[maxn];
    int maxx;
    void addedge(int fr,int to,int cost)
    {
        edge[num].nex=head[fr];
        edge[num].to=to;
        edge[num].cost=cost;
        head[fr]=num++;
    }
    int bfs(int t)
    {
        memset(vis,0,sizeof(vis));
        memset(dis,0,sizeof(dis));
        queue<int>q;
        q.push(t);
        vis[t]=1;
        maxx=0;
        int index=t;
        while(!q.empty())
        {
            int temp=q.front();
    
            q.pop();
            for(int i=head[temp]; i!=-1; i=edge[i].nex)
            {int u=edge[i].to;
                if(vis[u]==0)
                {
                    vis[u]=1;
                    dis[u]=dis[temp]+edge[i].cost;
                    if(dis[u]>maxx)
                    {
                        maxx=dis[u];
                        index=u;
                    }
                     q.push(u);
                }
    
            }
        }
        return index;
    }
    int main()
    {
        num=0;
        memset(head,-1,sizeof(head));
        int u,v,w;
    //    for(int i=1; i<=5; i++)
    //    {
    //        cin>>u>>v>>w;
    //        addedge(u,v,w);
    //      addedge(v,u,w);
    //    }
        while(~scanf("%d%d%d",&u,&v,&w))
        {
            addedge(u,v,w);
            addedge(v,u,w);
        }
        int temp=bfs(1);
        bfs(temp);
        printf("%d
    ",maxx);
        return 0;
    }
    
  • 相关阅读:
    网络数据处理
    进程间通信和网络
    附加的操作系统服务
    通用操作系统服务
    UIScrollView 子控件的自动布局经验
    UIImage 添加水印
    数据类型
    ios 获取手机的IP地址
    UILAbel 设置了attributedText 后省略号不显示
    swift
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10262805.html
Copyright © 2020-2023  润新知