結果
問題 |
No.3206 う し た ウ ニ 木 あ く ん 笑
|
ユーザー |
|
提出日時 | 2025-07-18 22:58:16 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,327 bytes |
コンパイル時間 | 2,429 ms |
コンパイル使用メモリ | 210,688 KB |
実行使用メモリ | 164,280 KB |
最終ジャッジ日時 | 2025-07-18 22:58:26 |
合計ジャッジ時間 | 10,522 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 7 WA * 23 |
ソースコード
#include <bits/stdc++.h> using namespace std; using ll = long long; int MN = 1e6; vector<vector<int>> G(MN); int N; vector<int> dp1(MN, 0); vector<int> dist(MN, 0); void dfs(int v, int par) { for (auto nv : G[v]) { if (nv == par) continue; dfs(nv, v); dist[nv] = dist[v] + 1; dp1[v] = max(dp1[v], dp1[nv]+1); } } vector<vector<int>> DP(MN, vector<int>(2, -1)); int res = 1; void dfs2(int v,int par) { multiset<int> st; // cout << v<< " " << DP[v][0] << " " << DP[v][1] << endl; map<int, int> cnt; for (auto nv : G[v]) { if (nv == par) continue; st.insert(dp1[nv]+1); cnt[dp1[nv]+1]++; } res = max(res, dist[v]+1); int dmx = max(DP[v][0], DP[v][1]); if (dmx != -1) { res = max(res, dmx+1); } for (auto v : cnt) { int d = v.first;int c = v.second; if (d <= dmx) { res = max(res, 1 + (d*(c+1))); } } for (auto nv : G[v]) { if (nv == par) continue; st.erase(st.find(dp1[nv] + 1)); //0 if (!st.empty()) DP[nv][0] = 1 + (*st.rbegin()); //1 if (DP[v][0] != -1) DP[nv][1] = 1 + DP[v][0]; if (DP[v][1] != -1) DP[nv][1] = max(DP[nv][1], 1 + DP[v][1]); st.insert(dp1[nv] + 1); dfs2(nv, v); } } int main() { cin >> N; 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); } dfs(0, 0); dfs2(0, 0); cout << res << endl; }