Submission #1695746
Source Code Expand
#include <bits/stdc++.h>
#define long long long
#define up(i,a,b) for (int i=a; i<=b; i++)
#define down(i,a,b) for (int i=a; i>=b; i--)
#define endl '\n'
#define X first
#define Y second
#define II pair<int, int>
#define III pair<int, pair<int, int> >
#define debug(X) cerr<< #X << " = " <<X << endl
#define debug2(X,Y) cerr<< #X << " = " <<X << ","<<#Y<<" = "<<Y<<endl
#define show(X,a,b) {cerr << #X << " = "; up(__,a,b) cerr << X[__] << ' '; cerr << endl;}
#define gc getchar
#define pc putchar
using namespace std;
inline void read(int &x)
{
register int c = gc();
x = 0;
int neg = 0;
for (;((c<48 || c>57) && c != '-') ;c = gc());
if(c=='-') {neg=1;c=gc();}
for(;c>47 && c<58;c = gc()) {x = (x<<1) + (x<<3) + c - 48;}
if(neg) x=-x;
}
inline void writeln(int x){
char buffor[21];
register int i=0;
int neg=0; if (x<0) {neg=1; x= -x;}
do{
buffor[i++]=(x%10)+'0';
x/=10;
} while(x);
i--;
if (neg) pc('-');
while(i>=0) pc(buffor[i--]);
pc('\n');
}
const int N= (int)1e5+10;
int n,K;
vector<int> a[N];
int p[18][N],h[N],listH[N],in[N],out[N],Time;
int res= 0;
struct segment_tree
{
int low[4*N],high[4*N],it[4*N];
void build(int x,int l,int r)
{
low[x]= l; high[x]= r; it[x]= 0;
if (l==r) return;
int m= (l+r)/2;
build(2*x,l,m); build(2*x+1,m+1,r);
}
void update(int x,int l,int r)
{
if (low[x]> r or high[x]<l) return;
if (low[x]>=l and high[x]<=r)
{
it[x]++; return;
};
update(2*x,l,r); update(2*x+1,l,r);
}
int query(int x,int pos)
{
if (low[x]== high[x]) return it[x];
if (pos<= high[2*x]) return it[x]+ query(2*x,pos);
else return it[x]+ query(2*x+1,pos);
}
}exist;
void input()
{
cin>>n>>K;
up(i,1,n)
{
if (i==1)
{
int u; cin>>u; if (u!=1) res++;
}
else
{
cin>>p[0][i];
a[p[0][i]].push_back(i);
}
}
}
void dfs(int u,int par,int curH)
{
p[0][u]= par; h[u]= curH;
in[u]= ++Time;
for (auto v: a[u])
if (v!= par) dfs(v,u,curH+1);
out[u]= Time;
}
bool byH(int i,int j)
{
return h[i]> h[j];
}
int getbit(int x,int k)
{
return (x>>k) & 1;
}
int par_k(int u)
{
down(i,17,0)
if (getbit(K-1,i)) u= p[i][u];
return u;
}
void solve()
{
Time= 0; dfs(1,0,0);
up(i,1,17)
up(j,1,n)
p[i][j]= p[i-1][p[i-1][j]];
up(i,1,n) listH[i]= i;
sort(listH+1,listH+1+n,byH);
exist.build(1,1,n);
up(id,1,n)
{
int u= listH[id];
if (h[u]<=K or exist.query(1,in[u])!=0 ) continue;
int p= par_k(u);
exist.update(1,in[p],out[p]); res++;
}
cout<<res;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);// don't use when interactive
#ifdef I_Love_Pork
#define TASK "tmp"
freopen(TASK".inp","r",stdin);
freopen(TASK".out","w",stdout);
#endif
input();
solve();
return 0;
}
Submission Info
Submission Time |
|
Task |
D - Teleporter |
User |
I_Love_Pork |
Language |
C++14 (GCC 5.4.1) |
Score |
800 |
Code Size |
3134 Byte |
Status |
AC |
Exec Time |
77 ms |
Memory |
24704 KB |
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
800 / 800 |
Status |
|
|
Set Name |
Test Cases |
Sample |
0_00.txt, 0_01.txt, 0_02.txt |
All |
0_00.txt, 0_01.txt, 0_02.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt, 1_16.txt, 1_17.txt, 1_18.txt, 1_19.txt, 1_20.txt, 1_21.txt, 1_22.txt, 1_23.txt, 1_24.txt, 1_25.txt, 1_26.txt, 1_27.txt, 1_28.txt, 1_29.txt, 1_30.txt, 1_31.txt, 1_32.txt, 1_33.txt, 1_34.txt, 1_35.txt, 1_36.txt, 1_37.txt, 1_38.txt, 1_39.txt, 1_40.txt, 1_41.txt, 1_42.txt, 1_43.txt, 1_44.txt, 1_45.txt, 1_46.txt, 1_47.txt, 1_48.txt, 1_49.txt, 1_50.txt, 1_51.txt, 1_52.txt, 1_53.txt, 1_54.txt |
Case Name |
Status |
Exec Time |
Memory |
0_00.txt |
AC |
5 ms |
13824 KB |
0_01.txt |
AC |
4 ms |
13824 KB |
0_02.txt |
AC |
5 ms |
13824 KB |
1_00.txt |
AC |
5 ms |
13824 KB |
1_01.txt |
AC |
5 ms |
13824 KB |
1_02.txt |
AC |
60 ms |
24704 KB |
1_03.txt |
AC |
55 ms |
24704 KB |
1_04.txt |
AC |
53 ms |
24704 KB |
1_05.txt |
AC |
50 ms |
24704 KB |
1_06.txt |
AC |
45 ms |
24704 KB |
1_07.txt |
AC |
45 ms |
24704 KB |
1_08.txt |
AC |
42 ms |
24704 KB |
1_09.txt |
AC |
42 ms |
24704 KB |
1_10.txt |
AC |
60 ms |
21632 KB |
1_11.txt |
AC |
56 ms |
21632 KB |
1_12.txt |
AC |
52 ms |
21632 KB |
1_13.txt |
AC |
77 ms |
18432 KB |
1_14.txt |
AC |
64 ms |
18432 KB |
1_15.txt |
AC |
59 ms |
18432 KB |
1_16.txt |
AC |
39 ms |
17148 KB |
1_17.txt |
AC |
24 ms |
17148 KB |
1_18.txt |
AC |
24 ms |
17148 KB |
1_19.txt |
AC |
17 ms |
15864 KB |
1_20.txt |
AC |
17 ms |
15864 KB |
1_21.txt |
AC |
17 ms |
15864 KB |
1_22.txt |
AC |
61 ms |
16896 KB |
1_23.txt |
AC |
52 ms |
16896 KB |
1_24.txt |
AC |
47 ms |
16896 KB |
1_25.txt |
AC |
62 ms |
16384 KB |
1_26.txt |
AC |
48 ms |
16384 KB |
1_27.txt |
AC |
44 ms |
16384 KB |
1_28.txt |
AC |
50 ms |
16128 KB |
1_29.txt |
AC |
24 ms |
16128 KB |
1_30.txt |
AC |
23 ms |
16128 KB |
1_31.txt |
AC |
49 ms |
17024 KB |
1_32.txt |
AC |
32 ms |
17024 KB |
1_33.txt |
AC |
31 ms |
17024 KB |
1_34.txt |
AC |
31 ms |
17024 KB |
1_35.txt |
AC |
58 ms |
17280 KB |
1_36.txt |
AC |
35 ms |
17280 KB |
1_37.txt |
AC |
34 ms |
17280 KB |
1_38.txt |
AC |
35 ms |
17280 KB |
1_39.txt |
AC |
54 ms |
17408 KB |
1_40.txt |
AC |
47 ms |
17408 KB |
1_41.txt |
AC |
36 ms |
17408 KB |
1_42.txt |
AC |
35 ms |
17408 KB |
1_43.txt |
AC |
54 ms |
17664 KB |
1_44.txt |
AC |
43 ms |
17664 KB |
1_45.txt |
AC |
41 ms |
17664 KB |
1_46.txt |
AC |
36 ms |
17664 KB |
1_47.txt |
AC |
54 ms |
19200 KB |
1_48.txt |
AC |
45 ms |
19200 KB |
1_49.txt |
AC |
43 ms |
19200 KB |
1_50.txt |
AC |
38 ms |
19200 KB |
1_51.txt |
AC |
57 ms |
23424 KB |
1_52.txt |
AC |
49 ms |
23424 KB |
1_53.txt |
AC |
47 ms |
23424 KB |
1_54.txt |
AC |
41 ms |
23424 KB |