SRM674 Div1 Easy VampireTree

2015/12/15 (Tue) SRM グラフ理論

問題

問題文

木があり,入力で各頂点の次数が指定されます. 次数に矛盾しない木を自由に構築できますか?できる場合,2 頂点間の距離の最大値を求めてください.

方針

頂点の数を $n$ とします. 辺の両端には $2$ の頂点があり,$n - 1$ 個の頂点があるので,次数の和が $2(n-1)$ になっているかどうかで判定できます. 存在する場合,次数が $1$ の頂点を $2$ つとってきて,その間に次数が $2$ 以上の頂点を繋いでいくと最大値が得られます. 残った次数 $1$ の頂点は適当な場所につなげればよいです.

問題分を要約すると上に書いたようになるんですが,すごく無駄な情報が多かったと思いました. 本番は誤読して解けませんでした...

実装

class VampireTree {
    public:
    int maxDistance(vector<int> deg) {
        int n = deg.size();
        int s = accumulate(deg.begin(), deg.end(), 0);
        if(2*(n-1) != s) return -1;
        int art = count_if(deg.begin(), deg.end(), [](int d){ return d >= 2; });
        return art + 1;
    }
};