UVa 10308 Roads in the North(DFS)

题意:

给定一张图,其实是一个二叉树,求二叉树中节点的最大距离。

思路:

其实这一题就是编程之美上面的:求二叉树中节点的最大距离。

这个最大距离肯定是两个叶子节点之间的,于是dfs遍历二叉树就行了。

#include <string>
#include <vector>
#include <sstream>
#include <iostream>
using namespace std;

struct Node {
    int e, len;
    Node(int _end, int _len) : e(_end), len(_len) { }
};

const int MAXN = 10010;
vector<Node> g[MAXN];

int ans;

int dfs(int u, int r)
{
    int tmax = 0, tans;
    for (int i = 0; i < g[u].size(); ++i)
    {
        int v = g[u][i].e;
        if (v != r)
        {
            tans = dfs(v, u) + g[u][i].len;
            if (tans + tmax > ans)
                ans = tans + tmax;
            if (tans > tmax)
                tmax = tans;
        }
    }
    return tmax;
}

int main()
{
    string s;
    while (!cin.eof())
    {
        for (int i = 0; i < MAXN; ++i)
            g[i].clear();

        getline(cin, s);
        while (s.length() > 0 && !cin.eof())
        {
            stringstream ss;
            ss << s;
            int u, v, len;
            ss >> u >> v >> len;
            g[u].push_back(Node(v, len));
            g[v].push_back(Node(u, len));

            getline(cin, s);
        }

        ans = 0;
        dfs(1, -1);
        cout << ans << endl;
    }
    return 0;
}

 

posted @ 2012-12-09 21:11  kedebug  阅读(699)  评论(0编辑  收藏  举报