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
AC × 3
AC × 58
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