Submission #64738
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | #include <bits/stdc++.h> using namespace std; using ll=int64_t; using pll=pair<ll,ll>; const ll INF = 0x1fffffffffffffff; #define each(i,a) for(auto&&i:a) #define rep(i,n) for(ll i=0;i<n;i++) void chmin(ll& a, ll b){ if (a > b){ a = b; } } vector<ll> ans; vector<vector<ll>> g; vector<ll> color; vector<ll> cost; vector<ll> siz; vector< bool > used; ll n, mn, idx; void dfs1(ll from, ll at){ siz[at] = 1; n++; if (used[at]) return ; each(i, g[at]) if (i != from){ dfs1(at, i); siz[at] += siz[i]; } } void dfs2(ll from, ll at){ if (used[at]) return ; each(i, g[at]) if (i != from) dfs2(at, i); if (siz[at] * 2 >= n && mn > siz[at]){ mn = siz[at]; idx = at; } } void reset(ll from, ll at){ cost[color[at]] = INF; if (used[at]) return ; each(i, g[at]) if (i != from) reset(at, i); } void calc(ll from, ll at, ll d){ chmin(ans[at], cost[color[at]] + d); chmin(cost[color[at]], d); if (used[at]) return ; each(i, g[at]) if (i != from) calc(at, i, d + 1); } void centroid(ll root){ n = 0; mn = INF; idx = -1; dfs1(-1, root); dfs2(-1, root); const auto& g_root = g[idx]; reset(-1, idx); for (ll i = 0; i < g_root.size(); i++) calc(idx, g_root[i], 1); reset(-1, idx); for (ll i = g_root.size(); i--; ) calc(idx, g_root[i], 1); used[idx] = 1; each(i, g_root) if (!used[i]) centroid(i); } int main(){ cin.tie(0)->sync_with_stdio(0); ll n; cin >> n; ans.assign(n, INF); g.resize(n); color.resize(n); cost.resize(n); used.resize(n); siz.resize(n); for (ll& x : color){ cin >> x; x--; } for (ll i = 1; i < n; i++){ ll a, b; cin >> a >> b; a--; b--; g[a].push_back(b); g[b].push_back(a); if (color[a] == color[b]){ ans[a] = ans[b] = 1; } } centroid(0); each(i,ans)cout<<i<< '\n' ; } |
ステータス
項目 | データ |
---|---|
問題 | 1448 - 色付き山小屋 |
ユーザー名 | syoribu |
投稿日時 | 2020-11-15 23:04:53 |
言語 | C++17 |
状態 | Accepted |
得点 | 13 |
ソースコード長 | 2023 Byte |
最大実行時間 | 712 ms |
最大メモリ使用量 | 34748 KB |
セット
セット | 得点 | Cases | |
---|---|---|---|
1 | ALL | 13 / 13 | * |
テストケース
ファイル名 | 状態 | 実行時間 | メモリ使用量 | # |
---|---|---|---|---|
in1 | AC | 28 ms | 600 KB |
1
|
in2 | AC | 15 ms | 568 KB |
1
|
in3 | AC | 20 ms | 7244 KB |
1
|
in4 | AC | 25 ms | 16112 KB |
1
|
in5 | AC | 18 ms | 16696 KB |
1
|
in6 | AC | 21 ms | 16652 KB |
1
|
in7 | AC | 20 ms | 16608 KB |
1
|
in8 | AC | 22 ms | 16688 KB |
1
|
in9 | AC | 29 ms | 16640 KB |
1
|
in10 | AC | 18 ms | 552 KB |
1
|
in11 | AC | 25 ms | 380 KB |
1
|
in12 | AC | 18 ms | 460 KB |
1
|
in13 | AC | 19 ms | 540 KB |
1
|
in14 | AC | 21 ms | 496 KB |
1
|
in15 | AC | 16 ms | 572 KB |
1
|
in16 | AC | 29 ms | 688 KB |
1
|
in17 | AC | 21 ms | 676 KB |
1
|
in18 | AC | 20 ms | 664 KB |
1
|
in19 | AC | 32 ms | 1412 KB |
1
|
in20 | AC | 40 ms | 1548 KB |
1
|
in21 | AC | 232 ms | 10052 KB |
1
|
in22 | AC | 236 ms | 10460 KB |
1
|
in23 | AC | 599 ms | 20084 KB |
1
|
in24 | AC | 616 ms | 20592 KB |
1
|
in25 | AC | 702 ms | 21356 KB |
1
|
in26 | AC | 704 ms | 25708 KB |
1
|
in27 | AC | 712 ms | 27228 KB |
1
|
in28 | AC | 708 ms | 28156 KB |
1
|
in29 | AC | 578 ms | 27692 KB |
1
|
in30 | AC | 480 ms | 30748 KB |
1
|
in31 | AC | 530 ms | 30640 KB |
1
|
in32 | AC | 511 ms | 29656 KB |
1
|
in33 | AC | 499 ms | 28760 KB |
1
|
in34 | AC | 329 ms | 28852 KB |
1
|
in35 | AC | 209 ms | 29400 KB |
1
|
in36 | AC | 471 ms | 33712 KB |
1
|
in37 | AC | 456 ms | 33468 KB |
1
|
in38 | AC | 457 ms | 33808 KB |
1
|
in39 | AC | 456 ms | 33916 KB |
1
|
in40 | AC | 390 ms | 34748 KB |
1
|