답안 #519814

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
519814 2022-01-27T11:15:24 Z new_acc 수도 (JOI20_capital_city) C++14
11 / 100
3000 ms 407964 KB
#include<bits/stdc++.h>
#define fi first
#define se second
#define rep(a, b) for(int a = 0; a < (b); a++)
using namespace std;
typedef long long ll;
typedef vector<ll> vi;
typedef vector<ll> vl;
const int N=2e5+10;
const int L=19;
const int M=4e6+5e5;
vi graf[N],r[N],graf2[M];
int t[N],gl[N],spojna[M],ile[M],pre[N],post[M],kon[M];
pair<int,int> jump[N][L+1];
int l=0,l2=0,n,k;
bitset<M>kan;
bitset<M>vis;
void add(int a,int b){
	graf2[a].push_back(b);
}
void dfs(int v,int o,int g){
	pre[v]=++l2;
	gl[v]=g;
	jump[v][0]={o,++l};
	add(l,t[o-1]);
	for(int j=1;j<=L;j++) jump[v][j].fi=jump[jump[v][j-1].fi][j-1].fi,jump[v][j].se=++l,add(l,jump[v][j-1].se),add(l,jump[jump[v][j-1].fi][j-1].se);
	for(auto u:graf[v]){
		if(u==o) continue;
		dfs(u,v,g+1);
	}
}
int lca(int a,int b){
	if(gl[a]<gl[b]) swap(a,b);
	for(int i=L;i>=0;i--) if(gl[jump[a][i].fi]>=gl[b]) a=jump[a][i].fi;
	if(a==b) return a;
	int res=0;
	for(int i=L;i>=0;i--){
		if(jump[a][i].fi==jump[b][i].fi) res=jump[a][i].fi;
		else a=jump[a][i].fi,b=jump[b][i].fi;
	}
	return res;
}
void dod(int a,int l,int x){
	for(int i=L;i>=0;i--) if(gl[jump[a][i].fi]>=gl[l]) add(x,jump[a][i].se),a=jump[a][i].fi;
}
void dfs2(int v){
	if(vis[v]) return;
	vis[v]=1;
	for(auto u:graf2[v]) dfs2(u);
	post[l2++]=v;
}
void dfs3(int v,int s){
	if(vis[v]) return;
	vis[v]=1;
	spojna[v]=s;
	if(v<=k-1) ile[s]++;
	for(auto u:graf2[v]) dfs3(u,s);
}
void odw(){
	rep(i,l+1) kon[i]=graf2[i].size();
	rep(i,l+1) {
		for(int j=kon[i]-1;j>=0;j--) graf2[graf2[i][j]].push_back(i),swap(graf2[i][j],graf2[i][graf2[i].size()-1]),graf2[i].pop_back();
		graf2[i].shrink_to_fit();
	}
}
void solve(){
	cin>>n>>k;
	rep(i,n-1){
		int a,b;
		cin>>a>>b;
		graf[a].push_back(b),graf[b].push_back(a);
	}
	l=k-1;
	rep(i,n){
		cin>>t[i];
		t[i]--;
		r[t[i]].push_back(i+1);
	}
	dfs(1,1,1);
	vector<pair<int,int> >vv;
	rep(i,k){	
		vv.clear();
		for(auto u:r[i]) vv.push_back({pre[u],u});
		sort(vv.begin(),vv.end());
		for(int j=1;j<vv.size();j++){
			int l=lca(vv[j].se,vv[j-1].se);
			dod(vv[j].se,l,i),dod(vv[j-1].se,l,i);
		}
	}
	l2=0;
	rep(i,l+1) dfs2(i);
	rep(i,l+1) vis[i]=0;
	odw();
	int curr=0;
	for(int i=l;i>=0;i--) if(!vis[post[i]]) dfs3(post[i],++curr);
	rep(i,l+1){
		bool b=0;
		for(auto u:graf2[i]) if(spojna[i]!=spojna[u]) kan[spojna[u]]=1;
	}
	int res=INT_MAX;
	rep(i,l+1) if(!kan[spojna[i]]) res=min(res,ile[spojna[i]]);
	cout<<res-1<<"\n";
}
int main(){
	ios_base::sync_with_stdio(0),cin.tie(0);
	solve();
}

Compilation message

capital_city.cpp: In function 'void solve()':
capital_city.cpp:85:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   85 |   for(int j=1;j<vv.size();j++){
      |               ~^~~~~~~~~~
capital_city.cpp:97:8: warning: unused variable 'b' [-Wunused-variable]
   97 |   bool b=0;
      |        ^
# 결과 실행 시간 메모리 Grader output
1 Correct 59 ms 115476 KB Output is correct
2 Correct 51 ms 115460 KB Output is correct
3 Correct 52 ms 115440 KB Output is correct
4 Correct 53 ms 115396 KB Output is correct
5 Correct 53 ms 115396 KB Output is correct
6 Correct 54 ms 115372 KB Output is correct
7 Correct 55 ms 115476 KB Output is correct
8 Correct 55 ms 115384 KB Output is correct
9 Correct 62 ms 115400 KB Output is correct
10 Correct 60 ms 115368 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 59 ms 115476 KB Output is correct
2 Correct 51 ms 115460 KB Output is correct
3 Correct 52 ms 115440 KB Output is correct
4 Correct 53 ms 115396 KB Output is correct
5 Correct 53 ms 115396 KB Output is correct
6 Correct 54 ms 115372 KB Output is correct
7 Correct 55 ms 115476 KB Output is correct
8 Correct 55 ms 115384 KB Output is correct
9 Correct 62 ms 115400 KB Output is correct
10 Correct 60 ms 115368 KB Output is correct
11 Correct 65 ms 118468 KB Output is correct
12 Correct 63 ms 118560 KB Output is correct
13 Correct 62 ms 118468 KB Output is correct
14 Correct 63 ms 118452 KB Output is correct
15 Correct 65 ms 118176 KB Output is correct
16 Correct 84 ms 118160 KB Output is correct
17 Correct 72 ms 118212 KB Output is correct
18 Correct 62 ms 118012 KB Output is correct
19 Correct 62 ms 118376 KB Output is correct
20 Correct 62 ms 118040 KB Output is correct
21 Correct 68 ms 118132 KB Output is correct
22 Correct 64 ms 118200 KB Output is correct
23 Correct 80 ms 119200 KB Output is correct
24 Correct 79 ms 117956 KB Output is correct
25 Correct 63 ms 118084 KB Output is correct
26 Correct 63 ms 117956 KB Output is correct
27 Correct 64 ms 118200 KB Output is correct
28 Correct 69 ms 118140 KB Output is correct
29 Correct 68 ms 118068 KB Output is correct
30 Correct 64 ms 118100 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3071 ms 407964 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 59 ms 115476 KB Output is correct
2 Correct 51 ms 115460 KB Output is correct
3 Correct 52 ms 115440 KB Output is correct
4 Correct 53 ms 115396 KB Output is correct
5 Correct 53 ms 115396 KB Output is correct
6 Correct 54 ms 115372 KB Output is correct
7 Correct 55 ms 115476 KB Output is correct
8 Correct 55 ms 115384 KB Output is correct
9 Correct 62 ms 115400 KB Output is correct
10 Correct 60 ms 115368 KB Output is correct
11 Correct 65 ms 118468 KB Output is correct
12 Correct 63 ms 118560 KB Output is correct
13 Correct 62 ms 118468 KB Output is correct
14 Correct 63 ms 118452 KB Output is correct
15 Correct 65 ms 118176 KB Output is correct
16 Correct 84 ms 118160 KB Output is correct
17 Correct 72 ms 118212 KB Output is correct
18 Correct 62 ms 118012 KB Output is correct
19 Correct 62 ms 118376 KB Output is correct
20 Correct 62 ms 118040 KB Output is correct
21 Correct 68 ms 118132 KB Output is correct
22 Correct 64 ms 118200 KB Output is correct
23 Correct 80 ms 119200 KB Output is correct
24 Correct 79 ms 117956 KB Output is correct
25 Correct 63 ms 118084 KB Output is correct
26 Correct 63 ms 117956 KB Output is correct
27 Correct 64 ms 118200 KB Output is correct
28 Correct 69 ms 118140 KB Output is correct
29 Correct 68 ms 118068 KB Output is correct
30 Correct 64 ms 118100 KB Output is correct
31 Execution timed out 3071 ms 407964 KB Time limit exceeded
32 Halted 0 ms 0 KB -