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;

}

 

你可能感兴趣的:(DFS)