結果

問題 No.763 Noelちゃんと木遊び
ユーザー ttkkggww
提出日時 2020-03-31 22:18:42
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 101 ms / 2,000 ms
コード長 610 bytes
コンパイル時間 1,477 ms
コンパイル使用メモリ 166,252 KB
実行使用メモリ 17,920 KB
最終ジャッジ日時 2025-03-22 10:37:34
合計ジャッジ時間 4,048 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 22
権限があれば一括ダウンロードができます

ソースコード

diff #

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

int n;
vector<vector<int>> M;
ll dp[101010][2];
//dp[i][j]j..切るか切らないかの時の数

void dfs(int now,int p = -1)
{
	for(auto i:M[now])
	{
		if(p!=i)
		{
			dfs(i,now);
			dp[now][0] += max(dp[i][0]-1,dp[i][1]);
			dp[now][1] += max(dp[i][0],dp[i][1]);
		}
	}	
}
int main()
{
	cin >> n;	
	M = vector<vector<int>>(n);
	for(int i = 0;i<n-1;++i)
	{
		int x,y;
		cin >> x >> y;
		x--;y--;
		M[x].push_back(y);
		M[y].push_back(x);
	}
	for(int i = 0;i<n+1;i++){dp[i][0]++;}
	dfs(0);
	cout<<max(dp[0][1],dp[0][0])<<endl;
	return 0;
}
0