POJ2631 Roads in the North

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ2631 Roads in the North相关的知识,希望对你有一定的参考价值。

题解:

树的最长路径,根据树的最长路径的性质,从任一一点bfs得到最远的点的位置,然后再从该点重新bfs一次就可以得到树的直径了

数学证明http://www.cnblogs.com/wuyiqi/archive/2012/04/08/2437424.html

代码:

#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
#define pb push_back
#define mp make_pair
#define se second
#define fs first
#define ll long long
#define CLR(x) memset(x,0,sizeof x)
#define MC(x,y) memcpy(x,y,sizeof(x))  
#define SZ(x) ((int)(x).size())
#define FOR(it,c) for(__typeof((c).begin()) it=(c).begin();it!=(c).end();it++)
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1 
#define INF 2097152
typedef pair<int,int> P;
const double eps=1e-9;
const int maxn=10100;
const int mod=1e9+7;

struct Node{
    int v,w,nxt;
};

Node edges[maxn*2];
int head[maxn],dis[maxn],vis[maxn];
int goal,cnt,max_length;

void Addedge(int u,int v,int w){
    edges[cnt].v=v;
    edges[cnt].w=w;
    edges[cnt].nxt=head[u];
    head[u]=cnt++;
}

int bfs(int u){
    memset(vis,0,sizeof(vis));
    memset(dis,0,sizeof(dis));
    queue<int> q;
    q.push(u);
    vis[u]=1;
    while(!q.empty()){
        int now=q.front();
        q.pop();
        for(int i=head[now];i!=-1;i=edges[i].nxt){
            int v=edges[i].v;
            if(!vis[v]){
                dis[v]=dis[now]+edges[i].w;
                q.push(v);
                vis[v]=1;
            }
            if(dis[v]>max_length){
                max_length=dis[v];
                goal=v;
            }
        }
    }
    return max_length;
}


int main(){
    memset(head,-1,sizeof(head));
    cnt=0;
    max_length=0;
    int u,v,w;
    while(~scanf("%d%d%d",&u,&v,&w)){
        Addedge(u,v,w);Addedge(v,u,w);
    }
    bfs(1);
    printf("%d\\n",bfs(goal));
}

 

以上是关于POJ2631 Roads in the North的主要内容,如果未能解决你的问题,请参考以下文章

题解报告:poj 2631 Roads in the North(最长链)

poj2631 ?Roads in the North(求树的直径)

POJ2631 Roads in the North

[Poj] Roads in the North

poj Roads in the North 题解

Roads in the North (树的直径)