Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Bismillahi-r-Rahmani-r-Rahim
- RhIeyAaD
- IIT-7th Batch,JU
- */
- #include<bits/stdc++.h>
- using namespace std;
- #define ll long long int
- #define MAX 2134567891
- #define INF 1e9 + 7
- #define MIN INT_MIN
- #define fr(i,n) for(i=0;i<n;i++)
- #define rep(i,n) for(i=1;i<=n;i++)
- #define ALL(n) n.begin(),n.end()
- #define mem(x,n) memset(x,n,sizeof(x))
- #define T_C(t) printf("Case %lld: ",t)
- #define PAIR pair<ll,ll>
- #define MP make_pair
- #define pb(a) push_back(a)
- #define ff first
- #define ss second
- #define MOD 1000000007///10^9
- #define p6 1000007 ///10^6->6 zero after 1 **
- #define hlw printf("hlw\n");
- #define SN 4*p6
- #define NN 100
- #define N p6
- ll lev[N],cnt[N],vis[N],n,mx=1;
- vector<ll>v[10005],x;
- //map <ll,ll> mp;
- void dfs(ll s,ll lv)
- {
- if(vis[s] || v[s].size()==0)return ;
- vis[s]=1;
- ll i,j,a,b;
- // cout<<v[s].size()<<" sz "<<v[s][0]<<endl;
- fr(i,v[s].size())
- {
- a=v[s][i];
- if(vis[a]==0)
- {
- lev[a]=lv+1;
- mx=max(mx,lv+1);
- cnt[lv+1]++;
- //cout<<"sending "<<a<<" with level "<<lv+1<<endl;
- dfs(a,lv+1);
- }
- }
- }
- int main()
- {
- //while(1)
- //READ;WRITE;
- {
- ll a=0,b=0,c=0,d,diff,e,f,g,i,j,k,l,m,in,mod,loc,p,q,r,u,val,w,t,tc,sz,lo,hi,mid,mn=MAX,sum=0,ans=0;
- cin>>n>>k;
- rep(i,n)
- {
- cin>>a;
- v[a].pb(i);
- if(a==0)
- {
- x.pb(i);
- lev[i]=1;
- cnt[1]++;
- }
- }
- l=x.size();
- fr(i,l)
- {
- // cout<<"sending "<<x[i]<<" with level "<<1<<endl;
- dfs(x[i],1);
- }
- c=0;
- rep(i,mx)
- {
- a=cnt[i]+c;
- // cout<<i<<" a "<<a<<" c "<<c<<endl;
- ans++;
- if(a>k)c=a-k;
- else c=0;
- }
- if(c>0)
- {
- ans+=c/k;
- if(c%k!=0)ans++;
- }
- cout<<ans<<endl;
- }
- return 0;
- }
- /*
- 10 10
- 4 4 6 8 7 5 0 9 0 4
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement