結果
| 問題 |
No.2532 Want Play More
|
| コンテスト | |
| ユーザー |
srjywrdnprkt
|
| 提出日時 | 2024-03-10 02:23:36 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 185 ms / 2,000 ms |
| コード長 | 1,103 bytes |
| コンパイル時間 | 2,060 ms |
| コンパイル使用メモリ | 200,368 KB |
| 最終ジャッジ日時 | 2025-02-20 03:35:18 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 26 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main(){
cin.tie(nullptr);
ios_base::sync_with_stdio(false);
//dp(i, j) : 頂点iにプレイヤーjがいる状態で始めた時のターン数
int N, a, b;
cin >> N;
vector<vector<int>> E(N+1);
for (int i=1; i<=N-1; i++){
cin >> a >> b;
E[a].push_back(b);
E[b].push_back(a);
}
vector dp(N+1, vector<int>(2));
for (int i=1; i<=N; i++) dp[i][1] = 1e9;
auto dfs=[&](auto self, int from, int p)->void{
if (p != -1 && E[from].size() == 1){
dp[from][0] = 0;
dp[from][1] = 0;
return;
}
for (auto to : E[from]){
if (to == p) continue;
self(self, to, from);
//Halcは最大化
dp[from][0] = max(dp[from][0], dp[to][1]+1);
//Sappは最小化
dp[from][1] = min(dp[from][1], dp[to][0]+1);
}
};
dfs(dfs, 1, -1);
if (N == 1) dp[1][1] = 0;
cout << dp[1][0] << endl;
cout << dp[1][1] << endl;
return 0;
}
srjywrdnprkt