# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
414938 | 2021-05-31T10:49:14 Z | Pro_ktmr | 수도 (JOI20_capital_city) | C++17 | 2840 ms | 97124 KB |
#pragma GCC target ("avx") #pragma GCC optimize ("unroll-loops") #pragma GCC optimize ("O3") #include"bits/stdc++.h" #include<unordered_set> #include<unordered_map> #include<random> using namespace std; typedef long long ll; const ll MOD = (ll)(1e9+7); #define pb push_back #define mp make_pair #define all(x) (x).begin(), (x).end() #define rep(i, n) for(int (i)=0; (i)<(int)(n); (i)++) int dx[4]={ 1,0,-1,0 }; int dy[4]={ 0,1,0,-1 }; int N, K; vector<int> e[200000]; int C[200000]; int G[200000] ={}; bool used[200000] ={}; int sub[200000]; int par[200000]; vector<int> chi[200000]; bool ok[200000]; int dfs(int n, int p, int N){ sub[n] = 1; par[n] = p; chi[n].clear(); ok[n] = true; rep(i, e[n].size()){ if(e[n][i] == p || used[e[n][i]]) continue; chi[n].pb(e[n][i]); int ret = dfs(e[n][i], n, N); if(ret > N/2) ok[n] = false; sub[n] += ret; } if(N-sub[n] > N/2) ok[n] = false; return sub[n]; } int ans = 200000; void DivideAndConquer(vector<int> v){ unordered_map<int, vector<int>> g; rep(i, v.size()){ g[C[v[i]]].pb(v[i]); } dfs(v[0], -1, v.size()); int m = -1; rep(i, v.size()){ if(ok[v[i]]) m = v[i]; } dfs(m, -1, v.size()); unordered_set<int> group; queue<int> que; unordered_set<int> vis; if(g[C[m]].size() != G[C[m]]) goto NEXT; rep(i, g[C[m]].size()) que.push(g[C[m]][i]); group.insert(C[m]); vis.insert(m); while(!que.empty()){ int a = que.front(); que.pop(); while(m != a){ a = par[a]; if(vis.count(a)) break; vis.insert(a); if(group.count(C[a])) continue; if(g[C[a]].size() != G[C[a]]) goto NEXT; rep(i, g[C[a]].size()){ que.push(g[C[a]][i]); vis.insert(g[C[a]][i]); } group.insert(C[a]); } } ans = min(ans, (int)group.size()-1); NEXT: used[m] = true; unordered_set<int> st; st.insert(m); vector<int> nxt; rep(i, v.size()){ if(st.count(v[i])) continue; nxt.clear(); queue<int> q; q.push(v[i]); while(!q.empty()){ int n = q.front(); q.pop(); nxt.pb(n); st.insert(n); rep(j, e[n].size()){ if(st.count(e[n][j]) || used[e[n][j]]) continue; q.push(e[n][j]); } } DivideAndConquer(nxt); } } signed main(){ scanf("%d%d", &N, &K); rep(i, N-1){ int A, B; scanf("%d%d", &A, &B); A--; B--; e[A].pb(B); e[B].pb(A); } rep(i, N){ scanf("%d", C+i); C[i]--; G[C[i]]++; } vector<int> v; rep(i, N) v.pb(i); DivideAndConquer(v); printf("%d\n", ans); }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 7 ms | 9676 KB | Output is correct |
2 | Correct | 7 ms | 9676 KB | Output is correct |
3 | Correct | 8 ms | 9700 KB | Output is correct |
4 | Correct | 7 ms | 9676 KB | Output is correct |
5 | Correct | 7 ms | 9704 KB | Output is correct |
6 | Correct | 7 ms | 9724 KB | Output is correct |
7 | Correct | 7 ms | 9676 KB | Output is correct |
8 | Correct | 7 ms | 9640 KB | Output is correct |
9 | Correct | 7 ms | 9676 KB | Output is correct |
10 | Correct | 7 ms | 9700 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 7 ms | 9676 KB | Output is correct |
2 | Correct | 7 ms | 9676 KB | Output is correct |
3 | Correct | 8 ms | 9700 KB | Output is correct |
4 | Correct | 7 ms | 9676 KB | Output is correct |
5 | Correct | 7 ms | 9704 KB | Output is correct |
6 | Correct | 7 ms | 9724 KB | Output is correct |
7 | Correct | 7 ms | 9676 KB | Output is correct |
8 | Correct | 7 ms | 9640 KB | Output is correct |
9 | Correct | 7 ms | 9676 KB | Output is correct |
10 | Correct | 7 ms | 9700 KB | Output is correct |
11 | Correct | 14 ms | 10188 KB | Output is correct |
12 | Correct | 14 ms | 10096 KB | Output is correct |
13 | Correct | 13 ms | 10124 KB | Output is correct |
14 | Correct | 15 ms | 10088 KB | Output is correct |
15 | Correct | 17 ms | 10336 KB | Output is correct |
16 | Correct | 16 ms | 10284 KB | Output is correct |
17 | Correct | 12 ms | 10224 KB | Output is correct |
18 | Correct | 13 ms | 10320 KB | Output is correct |
19 | Correct | 14 ms | 10316 KB | Output is correct |
20 | Correct | 14 ms | 10188 KB | Output is correct |
21 | Correct | 14 ms | 10316 KB | Output is correct |
22 | Correct | 15 ms | 10540 KB | Output is correct |
23 | Correct | 17 ms | 10436 KB | Output is correct |
24 | Correct | 17 ms | 10348 KB | Output is correct |
25 | Correct | 17 ms | 10436 KB | Output is correct |
26 | Correct | 18 ms | 10404 KB | Output is correct |
27 | Correct | 17 ms | 10316 KB | Output is correct |
28 | Correct | 18 ms | 10348 KB | Output is correct |
29 | Correct | 17 ms | 10416 KB | Output is correct |
30 | Correct | 16 ms | 10376 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2480 ms | 96244 KB | Output is correct |
2 | Correct | 1349 ms | 96972 KB | Output is correct |
3 | Correct | 2323 ms | 95968 KB | Output is correct |
4 | Correct | 1294 ms | 97124 KB | Output is correct |
5 | Correct | 2300 ms | 91732 KB | Output is correct |
6 | Correct | 1287 ms | 96252 KB | Output is correct |
7 | Correct | 2301 ms | 92844 KB | Output is correct |
8 | Correct | 1205 ms | 95028 KB | Output is correct |
9 | Correct | 2368 ms | 85592 KB | Output is correct |
10 | Correct | 2265 ms | 82756 KB | Output is correct |
11 | Correct | 2382 ms | 81484 KB | Output is correct |
12 | Correct | 2467 ms | 84516 KB | Output is correct |
13 | Correct | 2347 ms | 82240 KB | Output is correct |
14 | Correct | 2351 ms | 89556 KB | Output is correct |
15 | Correct | 2348 ms | 84652 KB | Output is correct |
16 | Correct | 2368 ms | 78480 KB | Output is correct |
17 | Correct | 2332 ms | 80712 KB | Output is correct |
18 | Correct | 2377 ms | 84220 KB | Output is correct |
19 | Correct | 2406 ms | 83184 KB | Output is correct |
20 | Correct | 2360 ms | 85900 KB | Output is correct |
21 | Correct | 8 ms | 9676 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 7 ms | 9676 KB | Output is correct |
2 | Correct | 7 ms | 9676 KB | Output is correct |
3 | Correct | 8 ms | 9700 KB | Output is correct |
4 | Correct | 7 ms | 9676 KB | Output is correct |
5 | Correct | 7 ms | 9704 KB | Output is correct |
6 | Correct | 7 ms | 9724 KB | Output is correct |
7 | Correct | 7 ms | 9676 KB | Output is correct |
8 | Correct | 7 ms | 9640 KB | Output is correct |
9 | Correct | 7 ms | 9676 KB | Output is correct |
10 | Correct | 7 ms | 9700 KB | Output is correct |
11 | Correct | 14 ms | 10188 KB | Output is correct |
12 | Correct | 14 ms | 10096 KB | Output is correct |
13 | Correct | 13 ms | 10124 KB | Output is correct |
14 | Correct | 15 ms | 10088 KB | Output is correct |
15 | Correct | 17 ms | 10336 KB | Output is correct |
16 | Correct | 16 ms | 10284 KB | Output is correct |
17 | Correct | 12 ms | 10224 KB | Output is correct |
18 | Correct | 13 ms | 10320 KB | Output is correct |
19 | Correct | 14 ms | 10316 KB | Output is correct |
20 | Correct | 14 ms | 10188 KB | Output is correct |
21 | Correct | 14 ms | 10316 KB | Output is correct |
22 | Correct | 15 ms | 10540 KB | Output is correct |
23 | Correct | 17 ms | 10436 KB | Output is correct |
24 | Correct | 17 ms | 10348 KB | Output is correct |
25 | Correct | 17 ms | 10436 KB | Output is correct |
26 | Correct | 18 ms | 10404 KB | Output is correct |
27 | Correct | 17 ms | 10316 KB | Output is correct |
28 | Correct | 18 ms | 10348 KB | Output is correct |
29 | Correct | 17 ms | 10416 KB | Output is correct |
30 | Correct | 16 ms | 10376 KB | Output is correct |
31 | Correct | 2480 ms | 96244 KB | Output is correct |
32 | Correct | 1349 ms | 96972 KB | Output is correct |
33 | Correct | 2323 ms | 95968 KB | Output is correct |
34 | Correct | 1294 ms | 97124 KB | Output is correct |
35 | Correct | 2300 ms | 91732 KB | Output is correct |
36 | Correct | 1287 ms | 96252 KB | Output is correct |
37 | Correct | 2301 ms | 92844 KB | Output is correct |
38 | Correct | 1205 ms | 95028 KB | Output is correct |
39 | Correct | 2368 ms | 85592 KB | Output is correct |
40 | Correct | 2265 ms | 82756 KB | Output is correct |
41 | Correct | 2382 ms | 81484 KB | Output is correct |
42 | Correct | 2467 ms | 84516 KB | Output is correct |
43 | Correct | 2347 ms | 82240 KB | Output is correct |
44 | Correct | 2351 ms | 89556 KB | Output is correct |
45 | Correct | 2348 ms | 84652 KB | Output is correct |
46 | Correct | 2368 ms | 78480 KB | Output is correct |
47 | Correct | 2332 ms | 80712 KB | Output is correct |
48 | Correct | 2377 ms | 84220 KB | Output is correct |
49 | Correct | 2406 ms | 83184 KB | Output is correct |
50 | Correct | 2360 ms | 85900 KB | Output is correct |
51 | Correct | 8 ms | 9676 KB | Output is correct |
52 | Correct | 1758 ms | 57768 KB | Output is correct |
53 | Correct | 1864 ms | 60368 KB | Output is correct |
54 | Correct | 1847 ms | 58964 KB | Output is correct |
55 | Correct | 1900 ms | 59380 KB | Output is correct |
56 | Correct | 1851 ms | 61188 KB | Output is correct |
57 | Correct | 1855 ms | 58964 KB | Output is correct |
58 | Correct | 2369 ms | 69592 KB | Output is correct |
59 | Correct | 2157 ms | 61660 KB | Output is correct |
60 | Correct | 2343 ms | 69060 KB | Output is correct |
61 | Correct | 2594 ms | 67280 KB | Output is correct |
62 | Correct | 1372 ms | 96956 KB | Output is correct |
63 | Correct | 1341 ms | 97052 KB | Output is correct |
64 | Correct | 1268 ms | 94140 KB | Output is correct |
65 | Correct | 1322 ms | 96920 KB | Output is correct |
66 | Correct | 1244 ms | 71060 KB | Output is correct |
67 | Correct | 1301 ms | 69960 KB | Output is correct |
68 | Correct | 1345 ms | 70968 KB | Output is correct |
69 | Correct | 1333 ms | 68212 KB | Output is correct |
70 | Correct | 1313 ms | 68220 KB | Output is correct |
71 | Correct | 1279 ms | 69772 KB | Output is correct |
72 | Correct | 1279 ms | 69688 KB | Output is correct |
73 | Correct | 1312 ms | 66532 KB | Output is correct |
74 | Correct | 1363 ms | 69792 KB | Output is correct |
75 | Correct | 1341 ms | 68004 KB | Output is correct |
76 | Correct | 2840 ms | 81320 KB | Output is correct |
77 | Correct | 2808 ms | 77920 KB | Output is correct |
78 | Correct | 2490 ms | 79160 KB | Output is correct |
79 | Correct | 2347 ms | 76676 KB | Output is correct |
80 | Correct | 2343 ms | 90120 KB | Output is correct |
81 | Correct | 2444 ms | 85852 KB | Output is correct |
82 | Correct | 2405 ms | 86012 KB | Output is correct |
83 | Correct | 2347 ms | 81844 KB | Output is correct |
84 | Correct | 2435 ms | 88948 KB | Output is correct |
85 | Correct | 2386 ms | 87172 KB | Output is correct |
86 | Correct | 2444 ms | 76684 KB | Output is correct |
87 | Correct | 2430 ms | 79172 KB | Output is correct |
88 | Correct | 2352 ms | 80044 KB | Output is correct |
89 | Correct | 2246 ms | 75124 KB | Output is correct |
90 | Correct | 2314 ms | 74996 KB | Output is correct |
91 | Correct | 2277 ms | 77612 KB | Output is correct |
92 | Correct | 2242 ms | 72352 KB | Output is correct |
93 | Correct | 2246 ms | 71880 KB | Output is correct |
94 | Correct | 2217 ms | 71280 KB | Output is correct |
95 | Correct | 2389 ms | 76984 KB | Output is correct |
96 | Correct | 2260 ms | 75112 KB | Output is correct |
97 | Correct | 2288 ms | 73968 KB | Output is correct |