zoukankan      html  css  js  c++  java
  • POJ 1985 Cow Marathon

    POJ1985 求树的直径,从任意点出发DFS到最远的点u 再从u出发DFS到最远的点v ( u,v)即是树的直径。

    算法证明用反证法可以轻松证出。

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<queue>
    using namespace std;
    const int maxn=100000;
    vector<int>road[maxn];
    int a[maxn],b[maxn],l[maxn];
    bool vis[maxn];
    long long int ans,now,tj;
    void dfs(int np,int len)
    {
     if(vis[np])return ;
     vis[np]=true;
     if(len>now){now=len;tj=np;}
     for(int i=0;i<road[np].size();i++)
     	{
     	 int ne=road[np][i];
     	 int next;
     	 if(a[ne]==np)next=b[ne];
     	 	else next=a[ne];
     	 dfs(next,len+l[ne]);
    	}
    }
    int main()
    {freopen("t.txt","r",stdin);
     ios::sync_with_stdio(false);
     int n,m;
     cin>>n>>m;
     memset(vis,0,sizeof(vis));
     for(int i=0;i<m;i++)
     	{
     	 int aa,bb,ll;
     	 char c;
     	 cin>>aa>>bb>>ll>>c;
     	 a[i]=aa;b[i]=bb;l[i]=ll;
     	 road[aa].push_back(i);road[bb].push_back(i);
    	}
     ans=0;
     now=0;
     tj=1;
     memset(vis,0,sizeof(vis));
     
     dfs(1,0);
     memset(vis,0,sizeof(vis));
     dfs(tj,0);
     cout<<now<<endl;
     return 0;
    }
    

      

  • 相关阅读:
    数据库+mysql
    网络并发项目
    网络编程 IO模型
    并发编程之死锁、进程池、协程
    类的使用
    面向对象—多态,反射
    面向对象-三大特性
    继承与派生
    面向对象
    模块进阶(二)
  • 原文地址:https://www.cnblogs.com/heisenberg-/p/6399844.html
Copyright © 2011-2022 走看看