zoukankan      html  css  js  c++  java
  • LightOJ 1094

    题意:就是求一个树的直径,也就是求任意两点的最大距离。

    做法:跑两遍DFS,详见代码。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<cmath>
    #include<cctype>
    #include<queue>
    #include<vector>
    #include<algorithm>
    
    using namespace std;
    typedef long long LL;
    #define N 100100
    #define INF 0x3f3f3f3f
    
    int n, k, head[N], dist[N], Max, Index;
    struct node
    {
        int v, len, next;
    } maps[N<<2];
    
    void add(int u, int v, int len)
    {
        maps[k].v=v;
        maps[k].len=len;
        maps[k].next=head[u];
        head[u]=k++;
    }
    
    void DFS(int u, int len)
    {
        dist[u]=len;
    
        if(dist[u]>Max)
        {
            Max=dist[u];
            Index=u;
        }
    
        for(int i=head[u]; i!=-1; i=maps[i].next)
        {
            int v=maps[i].v;
            if(dist[v]==-1)
                DFS(v, dist[u]+maps[i].len);
        }
    }
    
    int main()
    {
        int T, a, b, c, cas=1;
        scanf("%d", &T);
    
        while(T--)
        {
            k=1;
            memset(head, -1, sizeof(head));
            scanf("%d", &n);
            for(int i=0; i<n-1; i++)
            {
                scanf("%d%d%d", &a, &b, &c);
                add(a, b, c);
                add(b, a, c);
            }
    
            Max=Index=-1;
            memset(dist, -1, sizeof(dist));
            DFS(0, 0);
    
            memset(dist, -1, sizeof(dist));
            DFS(Index, 0);
            printf("Case %d: %d
    ", cas++, Max);
        }
        return 0;
    }
  • 相关阅读:
    一位年轻女董事长的忠告:不想穷下去就请看
    Ajax拓展02
    Ajax拓展
    Ajax概念及基础
    PHP了解01
    CSS3新增功能03
    CSS3新增功能02
    CSS3新增功能01
    html5介绍
    jQuery学习03
  • 原文地址:https://www.cnblogs.com/9968jie/p/5803980.html
Copyright © 2011-2022 走看看