# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
428160 | 2021-06-15T08:32:24 Z | juggernaut | 수도 (JOI20_capital_city) | C++17 | 3000 ms | 86188 KB |
#include<bits/stdc++.h> #define fr first #define sc second using namespace std; void usaco(string s){freopen((s+".in").c_str(),"r",stdin);freopen((s+".out").c_str(),"w",stdout);} typedef long long ll; #define USING_ORDERED_SET 0 #if USING_ORDERED_SET #include<bits/extc++.h> using namespace __gnu_pbds; template<class T>using ordered_set=tree<T,null_type,less<T>,rb_tree_tag,tree_order_statistics_node_update>; #endif template<class T>void umax(T &a,T b){if(a<b)a=b;} template<class T>void umin(T &a,T b){if(b<a)a=b;} #ifdef IOI2021SG #define printl(args...)printf(args) #else #define printl(args...)((void)0) #endif int n,k; int tin[200005],tout[200005],timer,up[200005][18]; vector<int>g[200005],color[200005],g1[200005],g2[200005]; int a[200005]; void dfs(int v,int p){ tin[v]=++timer; up[v][0]=p; for(int i=1;i<18;i++)up[v][i]=up[up[v][i-1]][i-1]; for(int to:g[v])if(to!=p)dfs(to,v); tout[v]=++timer; } bool upper(int a,int b){ return tin[a]<=tin[b]&&tout[a]>=tout[b]; } int lca(int a,int b){ if(upper(a,b))return a; if(upper(b,a))return b; for(int i=17;i>=0;i--)if(!upper(up[a][i],b))a=up[a][i]; return up[a][0]; } int lca(vector<int>&vec){ int l=vec[0]; for(int i=1;i<(int)vec.size();i++)l=lca(l,vec[i]); return l; } unordered_map<int,bool>vs[200005]; vector<pair<int,int>>edges; void add_edge(int a,int b){ if(a^b){ if(vs[a][b])return; vs[a][b]=true; edges.emplace_back(a,b); g1[a].push_back(b); g2[b].push_back(a); } } void add(int v,int a,int l){ while(a!=l){ a=up[a][0]; add_edge(v,::a[a]); if(v^::a[a])break; } } int cnt=0; bool vis[200005]; void run(int v){ vis[v]=true; cnt++; for(int to:g1[v])if(!vis[to])run(to); } int main(){ scanf("%d%d",&n,&k); for(int i=1;i<n;i++){ int x,y; scanf("%d%d",&x,&y); g[x].push_back(y); g[y].push_back(x); } for(int i=1;i<=n;i++){ scanf("%d",&a[i]); color[a[i]].push_back(i); } dfs(1,1); for(int i=1;i<=k;i++){ int l=lca(color[i]); for(int j=0;j<(int)color[i].size();j++)add(i,color[i][j],l); } int ans=k; for(int i=1;i<=k;i++){ for(int j=1;j<=k;j++)vis[j]=false; cnt=0; run(i); umin(ans,cnt); } printf("%d",ans-1); }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 24 ms | 30028 KB | Output is correct |
2 | Correct | 19 ms | 29972 KB | Output is correct |
3 | Correct | 19 ms | 30064 KB | Output is correct |
4 | Correct | 19 ms | 30032 KB | Output is correct |
5 | Correct | 18 ms | 30044 KB | Output is correct |
6 | Correct | 19 ms | 30028 KB | Output is correct |
7 | Correct | 18 ms | 30096 KB | Output is correct |
8 | Correct | 19 ms | 30028 KB | Output is correct |
9 | Correct | 18 ms | 30012 KB | Output is correct |
10 | Correct | 21 ms | 30028 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 24 ms | 30028 KB | Output is correct |
2 | Correct | 19 ms | 29972 KB | Output is correct |
3 | Correct | 19 ms | 30064 KB | Output is correct |
4 | Correct | 19 ms | 30032 KB | Output is correct |
5 | Correct | 18 ms | 30044 KB | Output is correct |
6 | Correct | 19 ms | 30028 KB | Output is correct |
7 | Correct | 18 ms | 30096 KB | Output is correct |
8 | Correct | 19 ms | 30028 KB | Output is correct |
9 | Correct | 18 ms | 30012 KB | Output is correct |
10 | Correct | 21 ms | 30028 KB | Output is correct |
11 | Correct | 26 ms | 30408 KB | Output is correct |
12 | Correct | 23 ms | 30336 KB | Output is correct |
13 | Correct | 25 ms | 30392 KB | Output is correct |
14 | Correct | 24 ms | 30348 KB | Output is correct |
15 | Correct | 23 ms | 30516 KB | Output is correct |
16 | Correct | 24 ms | 30516 KB | Output is correct |
17 | Correct | 23 ms | 30412 KB | Output is correct |
18 | Correct | 24 ms | 30372 KB | Output is correct |
19 | Correct | 22 ms | 30432 KB | Output is correct |
20 | Correct | 27 ms | 30376 KB | Output is correct |
21 | Correct | 25 ms | 30388 KB | Output is correct |
22 | Correct | 25 ms | 30628 KB | Output is correct |
23 | Correct | 26 ms | 30540 KB | Output is correct |
24 | Correct | 24 ms | 30564 KB | Output is correct |
25 | Correct | 21 ms | 30528 KB | Output is correct |
26 | Correct | 21 ms | 30516 KB | Output is correct |
27 | Correct | 25 ms | 30540 KB | Output is correct |
28 | Correct | 22 ms | 30496 KB | Output is correct |
29 | Correct | 22 ms | 30412 KB | Output is correct |
30 | Correct | 23 ms | 30452 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Execution timed out | 3089 ms | 86188 KB | Time limit exceeded |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 24 ms | 30028 KB | Output is correct |
2 | Correct | 19 ms | 29972 KB | Output is correct |
3 | Correct | 19 ms | 30064 KB | Output is correct |
4 | Correct | 19 ms | 30032 KB | Output is correct |
5 | Correct | 18 ms | 30044 KB | Output is correct |
6 | Correct | 19 ms | 30028 KB | Output is correct |
7 | Correct | 18 ms | 30096 KB | Output is correct |
8 | Correct | 19 ms | 30028 KB | Output is correct |
9 | Correct | 18 ms | 30012 KB | Output is correct |
10 | Correct | 21 ms | 30028 KB | Output is correct |
11 | Correct | 26 ms | 30408 KB | Output is correct |
12 | Correct | 23 ms | 30336 KB | Output is correct |
13 | Correct | 25 ms | 30392 KB | Output is correct |
14 | Correct | 24 ms | 30348 KB | Output is correct |
15 | Correct | 23 ms | 30516 KB | Output is correct |
16 | Correct | 24 ms | 30516 KB | Output is correct |
17 | Correct | 23 ms | 30412 KB | Output is correct |
18 | Correct | 24 ms | 30372 KB | Output is correct |
19 | Correct | 22 ms | 30432 KB | Output is correct |
20 | Correct | 27 ms | 30376 KB | Output is correct |
21 | Correct | 25 ms | 30388 KB | Output is correct |
22 | Correct | 25 ms | 30628 KB | Output is correct |
23 | Correct | 26 ms | 30540 KB | Output is correct |
24 | Correct | 24 ms | 30564 KB | Output is correct |
25 | Correct | 21 ms | 30528 KB | Output is correct |
26 | Correct | 21 ms | 30516 KB | Output is correct |
27 | Correct | 25 ms | 30540 KB | Output is correct |
28 | Correct | 22 ms | 30496 KB | Output is correct |
29 | Correct | 22 ms | 30412 KB | Output is correct |
30 | Correct | 23 ms | 30452 KB | Output is correct |
31 | Execution timed out | 3089 ms | 86188 KB | Time limit exceeded |
32 | Halted | 0 ms | 0 KB | - |