POJ 1985 Cow Marathon

来源:互联网 发布:coreldraw x6破解软件 编辑:程序博客网 时间:2024/05/21 18:43

题意:给出各个农场之间的距离,问你两个农场之间的最长距离是多少。        

看到是和噩梦导航有联系的,我一开始就以为还是LCA的问题,我把1986的程序改了一下,结果TLE,所以还是另辟它法,我们知道最远的两个农场一定会在叶子结点之间。假设 不在叶子结点,那么它还可以往下走到叶子结点求出最大,这点我也考虑到,在用LCA的时候我用标志位标志了还是超时了。所以两次DFS就好了。

代码:

    #include<iostream>      #include<vector>      #define maxn 100005      using namespace std;      struct node      {             int v,w;             node(int x,int y):v(x),w(y){}      };      int n;      vector<node> e[maxn];      bool visit[maxn];      int ans,p;      void DFS(int u,int dis)      {           if(dis>ans) ans=dis,p=u;           visit[u]=1;           for(int i=0;i<e[u].size();i++){                int v=e[u][i].v;                if( !visit[v])                    DFS(v,dis+e[u][i].w);           }                }      int main()      {         int m,a,b,c;         scanf("%d%d",&n,&m);                while( m--){                       scanf("%d%d%d %*c",&a,&b,&c);                       e[a].push_back(node(b,c));                       e[b].push_back(node(a,c));                }                ans=0, p=0;                memset(visit,0,sizeof(visit));                DFS(1,0);                ans=0;                memset(visit,0,sizeof(visit));                DFS(p,0);                printf("%d\n",ans);      }  


原创粉丝点击