# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
133312 | 2019-07-20T11:57:09 Z | ekrem | Mergers (JOI19_mergers) | C++ | 210 ms | 113512 KB |
#include <bits/stdc++.h> #define st first #define nd second #define mp make_pair #define pb push_back #define sol (k+k) #define sag (k+k+1) #define orta ((bas+son)/2) #define coc g[node][i] #define LOGN 20 #define mod 1000000007 #define inf 1000000009 #define N 1000005 using namespace std; typedef long long ll; typedef pair < int , int > ii; int n, k, root, ans, deg[N], l[N], a[N], der[N], par[LOGN + 5][N]; vector < int > g[N], cik[N]; set < int > s[N]; set < int > :: iterator it; void hazirla(int node, int pr, int dr){ der[node] = dr; par[0][node] = pr; for(int i = 0; i < g[node].size(); i++) if(coc != pr) hazirla(coc, node, dr + 1); } int lca(int u, int v){ if(!u or !v) return u + v; if(der[u] < der[v]) swap(u, v); for(int i = LOGN; i >= 0; i--) if(der[par[i][u]] >= der[v]) u = par[i][u]; if(u == v) return u; for(int i = LOGN; i >= 0; i--) if(par[i][u] != par[i][v]){ u = par[i][u]; v = par[i][v]; } return par[0][u]; } int dfs(int node, int par){ int don = 0; for(int i = 0; i < g[node].size(); i++) if(coc != par){ don += dfs(coc, node); if(s[coc].size() > s[node].size()) swap(s[node], s[coc]); for(it = s[coc].begin(); it != s[coc].end(); it++) s[node].insert(*it); } // cout << node << " " << don << endl; s[node].insert(a[node]); for(int i = 0; i < cik[node].size(); i++) s[node].erase(cik[node][i]); // cout << node << " " << don << endl; if(don > 1 or !par){ ans += don/2 + don%2; don = 0; } if(s[node].empty() and par){ // cout << node << " " << ans << endl; don = 1; } // cout << node << " " << don << endl; return don; } int main() { // freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); scanf("%d %d",&n ,&k); for(int i = 1; i < n; i++){ int u, v; scanf("%d %d",&u ,&v); g[v].pb(u); g[u].pb(v); if(++deg[u] >= 2)root = u; if(++deg[v] >= 2)root = v; } // root = 1; hazirla(root, 0, 1); for(int i = 1; i <= LOGN; i++) for(int j = 1; j <= n; j++) par[i][j] = par[i - 1][par[i - 1][j]]; for(int i = 1; i <= n; i++){ scanf("%d",a + i); l[a[i]] = lca(l[a[i]], i); } for(int i = 1; i <= k; i++) cik[l[i]].pb(i); dfs(root, 0); printf("%d",ans); return 0; }
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 87 ms | 94456 KB | Output is correct |
2 | Correct | 88 ms | 94584 KB | Output is correct |
3 | Correct | 87 ms | 94456 KB | Output is correct |
4 | Correct | 86 ms | 94392 KB | Output is correct |
5 | Correct | 87 ms | 94456 KB | Output is correct |
6 | Correct | 105 ms | 94456 KB | Output is correct |
7 | Correct | 95 ms | 94584 KB | Output is correct |
8 | Correct | 88 ms | 94460 KB | Output is correct |
9 | Correct | 87 ms | 94508 KB | Output is correct |
10 | Correct | 89 ms | 94456 KB | Output is correct |
11 | Correct | 87 ms | 94456 KB | Output is correct |
12 | Incorrect | 87 ms | 94428 KB | Output isn't correct |
13 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 87 ms | 94456 KB | Output is correct |
2 | Correct | 88 ms | 94584 KB | Output is correct |
3 | Correct | 87 ms | 94456 KB | Output is correct |
4 | Correct | 86 ms | 94392 KB | Output is correct |
5 | Correct | 87 ms | 94456 KB | Output is correct |
6 | Correct | 105 ms | 94456 KB | Output is correct |
7 | Correct | 95 ms | 94584 KB | Output is correct |
8 | Correct | 88 ms | 94460 KB | Output is correct |
9 | Correct | 87 ms | 94508 KB | Output is correct |
10 | Correct | 89 ms | 94456 KB | Output is correct |
11 | Correct | 87 ms | 94456 KB | Output is correct |
12 | Incorrect | 87 ms | 94428 KB | Output isn't correct |
13 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 87 ms | 94456 KB | Output is correct |
2 | Correct | 88 ms | 94584 KB | Output is correct |
3 | Correct | 87 ms | 94456 KB | Output is correct |
4 | Correct | 86 ms | 94392 KB | Output is correct |
5 | Correct | 87 ms | 94456 KB | Output is correct |
6 | Correct | 105 ms | 94456 KB | Output is correct |
7 | Correct | 95 ms | 94584 KB | Output is correct |
8 | Correct | 88 ms | 94460 KB | Output is correct |
9 | Correct | 87 ms | 94508 KB | Output is correct |
10 | Correct | 89 ms | 94456 KB | Output is correct |
11 | Correct | 87 ms | 94456 KB | Output is correct |
12 | Incorrect | 87 ms | 94428 KB | Output isn't correct |
13 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 210 ms | 113512 KB | Output is correct |
2 | Correct | 210 ms | 112784 KB | Output is correct |
3 | Incorrect | 90 ms | 94968 KB | Output isn't correct |
4 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 87 ms | 94456 KB | Output is correct |
2 | Correct | 88 ms | 94584 KB | Output is correct |
3 | Correct | 87 ms | 94456 KB | Output is correct |
4 | Correct | 86 ms | 94392 KB | Output is correct |
5 | Correct | 87 ms | 94456 KB | Output is correct |
6 | Correct | 105 ms | 94456 KB | Output is correct |
7 | Correct | 95 ms | 94584 KB | Output is correct |
8 | Correct | 88 ms | 94460 KB | Output is correct |
9 | Correct | 87 ms | 94508 KB | Output is correct |
10 | Correct | 89 ms | 94456 KB | Output is correct |
11 | Correct | 87 ms | 94456 KB | Output is correct |
12 | Incorrect | 87 ms | 94428 KB | Output isn't correct |
13 | Halted | 0 ms | 0 KB | - |