zoukankan      html  css  js  c++  java
  • 树的直径 poj 2631

    树的直径:从随意一点出发,BFS找到最远的距离,然后在从该点出发BFS找到最远的距离

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    #include <queue>
    #include <cmath>
    #include <deque>
    #include <vector>
    using namespace std;
    const int maxn = 10008;
    const int inf = 0x3ffffff;
    struct Node {
        int w, next,to;
        Node (int x = 0, int y = 0,int u = 0 ){
            to = x;w = y;next = u;
        }
    }e[maxn*4];
    int d[maxn],head[maxn],tot;
    void add(int u,int v,int w){
        e[tot] = Node(v,w,head[u]);
        head[u] = tot++;
        e[tot] = Node(u,w,head[v]);
        head[v] = tot++;
    }
    int BFS(int u) {
        memset(d,-1,sizeof(d));
        d[u] = 0;
        int max_int = 0,id = u;
        queue <int> q;
        q.push(u);
        while(!q.empty()){
            u = q.front();q.pop();
            if(d[u] > max_int) {
                max_int = d[u];
                id = u;
            }
    
            for(int i=head[u];i!=-1;i=e[i].next){
            if(d[e[i].to] == -1){
                    d[e[i].to] = d[u] + e[i].w;
                    q.push(e[i].to);
                }
            }
        }
       // cout << id <<endl;
        return id;
    }
    int main(){
        int u,v,w;    //freopen("input.txt","r",stdin);
        memset(head,-1,sizeof(head));
        tot = 0;
        while(scanf("%d%d%d",&u,&v,&w) == 3)add(u,v,w);
        printf("%d
    ",d[BFS(BFS(u))]);
        return 0;
    }
    
    
    
    


  • 相关阅读:
    预处理器&预处理变量&头文件保护&条件编译
    Xctf攻防世界—crypto—Normal_RSA
    RSA共模攻击
    centos7安装宝塔面板
    cobalt strike出现连接超时情况解决办法
    C语言变量
    Hello World!
    ctfshow—web—web7
    ctfshow—web—web6
    ctfshow—web—web5
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5233722.html
Copyright © 2011-2022 走看看