SRM674 Div1 Easy VampireTree
問題
木があり,入力で各頂点の次数が指定されます. 次数に矛盾しない木を自由に構築できますか?できる場合,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;
}
};