POJ 1985 COW MARATHON

来源:互联网 发布:淘宝模特小倩 编辑:程序博客网 时间:2024/05/21 17:40

原文:http://blog.acmj1991.com/?p=608

题意:给你一棵树让你找到相聚最远的两个点

思路:对任意一点进行广搜找到相距最远的点,再对这一点进行广搜找到与它相距最远的点,他们之间的距离就是最大的距

#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std; #define maxN 40100int num,head[maxN],dis[maxN],vis[maxN];struct node{    int v,next,w;}po[200000]; void add(int u,int v,int w){    po[num].v=v,po[num].w=w;    po[num].next=head[u],head[u]=num++;    po[num].v=u,po[num].w=w;    po[num].next=head[v],head[v]=num++;}int BFS(int s){    int maxx=0,k=s,hd=0,tail=0,q[maxN*4];    q[hd++]=s;vis[s]=1;    while(hd!=tail)    {        int u=q[tail++];        for(int i=head[u];i!=-1;i=po[i].next)            if(!vis[po[i].v]){                dis[po[i].v]=dis[u]+po[i].w;                q[hd++]=po[i].v;                if(dis[po[i].v]>dis[k])k=po[i].v;                vis[po[i].v]=1;            }    }    return k;} int main(){    int n,m;    char str[5];    memset(head,-1,sizeof(head));    scanf("%d%d",&n,&m);    for(int i=0;i<m;i++)    {        int u,v,w;        scanf("%d%d%d%s",&u,&v,&w,str);        add(u,v,w);    }    int k=BFS(1);    memset(dis,0,sizeof(dis));    memset(vis,0,sizeof(vis));    k=BFS(k);    printf("%d\n",dis[k]);}


 

原创粉丝点击