*[topcoder]TheTree

http://community.topcoder.com/stat?c=problem_statement&pm=12746&rd=15703

这道题有意思。给了树的根和每层节点的个数,求树的直径。做法是如果该层有两个节点,那么可能是有上有下,直径加二;如果该层只有一个节点,那么从这层开始,往下都只能加一。同时,该直径不一定经过根。

#include <vector>

using namespace std;



class TheTree {

public:

    int maximumDiameter(vector <int> cnt);

};



int TheTree::maximumDiameter(vector <int> cnt) {

    int D = cnt.size();

    int ans = 0;

    for (int i = 0; i < D; i++) {

        int res = 0;

        int flag = false;

        for (int j = i; j < D; j++) {

            if (cnt[j] == 1)

                flag = true;

            res += (flag ? 1 : 2);

            ans = max(res, ans);

        }

    }

    return ans;

};

  

你可能感兴趣的:(topcoder)