結果

問題 No.763 Noelちゃんと木遊び
ユーザー keita1_atcoder
提出日時 2022-05-26 01:22:22
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 308 ms / 2,000 ms
コード長 806 bytes
コンパイル時間 1,666 ms
コンパイル使用メモリ 173,940 KB
実行使用メモリ 33,536 KB
最終ジャッジ日時 2025-03-22 10:41:27
合計ジャッジ時間 6,964 ms
ジャッジサーバーID
(参考情報)
judge4 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 22
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;

map<pair<int,bool>,int> memo;
int DFS(vector<vector<int>> &G,int v,bool cut,int p = -1){
    if(memo.count(make_pair(v,cut))) return memo[make_pair(v,cut)];
    int res = 0;
    for(int x : G[v]){
        if(x==p) continue;
        if(cut) res += max(DFS(G,x,true,v)+(int)G[x].size()-2,DFS(G,x,false,v));
        else res += max(DFS(G,x,true,v)+(int)G[x].size()-1,DFS(G,x,false,v));
    }
    memo[make_pair(v,cut)] = res;
    return res;
}

int main(){
    int N;
    cin >> N;
    vector<vector<int>> G(N,vector<int>(0));
    for(int i = 0;i < N-1;i++){
        int U,V;
        cin >> U >> V;
        U--;
        V--;
        G[U].push_back(V);
        G[V].push_back(U);
    }
    cout << 1+max(DFS(G,0,true)+(int)G[0].size()-1,DFS(G,0,false)) << endl;
}
0