V8ORG - Tổ chức đối lập

Tác giả: hieult

Ngôn ngữ: C++

#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<cassert>
#include<ctime>
#include<algorithm>
#include<iterator>
#include<iostream>
#include<cctype>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<list>
//#include<conio.h>
#define ep 0.000000001
#define maxn 100111
#define oo 1111111111
#define TR(c, it) for(typeof((c).begin()) it=(c).begin(); it!=(c).end(); it++)
double const PI=4*atan(1);

using namespace std;

typedef pair<int, int> II;
typedef vector<int> VI;
typedef vector<II> VII;
typedef vector<VI> VVI;
typedef vector<VII> VVII;

int n,k,cha[11111],d[11111],x,KQ=0;

int main(){
     //freopen("V8ORG.in","r",stdin);
     scanf("%d %d",&k,&n);
     for(int i = 2;i<=n;i++){
           scanf("%d",&cha[i]);
           d[i] = 0;
           x = i;
           do{
                x = cha[x];
                d[x]++;
           }while(x!=1);
     }
     cha[1] = 1;
    // for(int i = 1;i<=n;i++) printf("%d %d\n",i,cha[i]);getch();
     for(int i = n;i>=1;i--){
           if(d[i]>=k-1){
                KQ++;       
                x = i;
                do{
                    // printf("%d\n",x);
                     x = cha[x];
                     d[x] -= (d[i]+1); 
                }while(x!=1);
           }  
     }
     
     printf("%d",KQ);
    // getch();
}

Download