http://acm.hust.edu.cn/vjudge/contest/121398#problem/H

 

不是特别理解,今天第一次碰到这种问题。给个链接看大神的解释吧

 

http://www.cnblogs.com/qq2424260747/p/4740347.html

 

 

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include<vector>
#include<queue>
#include<algorithm>

using namespace std;
typedef long long LL;

const int maxn=30010;
const int INF=0x3f3f3f3f;
const int mod=2009;
int head[maxn], dist[maxn];
int maxs, k, Index;

struct node
{
    int u, v, next, s;
}edge[maxn<<2];

void Add(int u, int v, int s)
{
    edge[k].u = u;
    edge[k].v = v;
    edge[k].s = s;
    edge[k].next = head[u];
    head[u] = k ++;
}

void DFS(int u, int s)
{
    dist[u] = s;

    if(dist[u]>maxs)
    {
        maxs = dist[u];
        Index = u;
    }

    for(int i=head[u]; i!=-1; i=edge[i].next)
    {
        int v = edge[i].v;
        if(dist[v] == -1)
            DFS(v, edge[i].s+dist[u]);
    }
}

int main()
{
    int T, n, u, v, s, cnt=1;

    scanf("%d", &T);

    while(T --)
    {
        scanf("%d", &n);

        memset(head, -1, sizeof(head));
        k = 0;

        for(int i=1; i<n; i++)
        {
            scanf("%d %d %d", &u, &v, &s);
            Add(u, v, s);
            Add(v, u, s);
        }

         maxs = 0;

        memset(dist, -1, sizeof(dist));
        DFS(0, 0);

        memset(dist, -1, sizeof(dist));
        DFS(Index, 0);

         printf("Case %d: %d\n", cnt++, maxs);
    }
    return 0;
}
View Code

 

posted on 2016-08-23 15:33  不忧尘世不忧心  阅读(138)  评论(0编辑  收藏  举报