首页 > 其他 > 详细

Graduation(思维,树上取叶子几次取完)

时间:2019-11-16 19:54:51      阅读:128      评论:0      收藏:0      [点我收藏+]

题意:https://codeforces.com/group/ikIh7rsWAl/contest/259944/problem/G

给你一颗树(可能有好几棵),你每次最多只能去掉k个叶子节点,问你最多几次能去完。

思路:

按深度deep保存每个深度的节点个数,从前往后for一遍,过程中如果一个deep大于k,就往后撩,最后到0为止,长度就是次数。(队友想出来的,我没这么聪明??)

  1 #define IOS ios_base::sync_with_stdio(0); cin.tie(0);
  2 #include <cstdio>//sprintf islower isupper
  3 #include <cstdlib>//malloc  exit strcat itoa system("cls")
  4 #include <iostream>//pair
  5 #include <fstream>//freopen("C:\\Users\\13606\\Desktop\\Input.txt","r",stdin);
  6 #include <bitset>
  7 //#include <map>
  8 //#include<unordered_map>
  9 #include <vector>
 10 #include <stack>
 11 #include <set>
 12 #include <string.h>//strstr substr strcat
 13 #include <string>
 14 #include <time.h>// srand(((unsigned)time(NULL))); Seed n=rand()%10 - 0~9;
 15 #include <cmath>
 16 #include <deque>
 17 #include <queue>//priority_queue<int, vector<int>, greater<int> > q;//less
 18 #include <vector>//emplace_back
 19 //#include <math.h>
 20 #include <cassert>
 21 #include <iomanip>
 22 //#include <windows.h>//reverse(a,a+len);// ~ ! ~ ! floor
 23 #include <algorithm>//sort + unique : sz=unique(b+1,b+n+1)-(b+1);+nth_element(first, nth, last, compare)
 24 using namespace std;//next_permutation(a+1,a+1+n);//prev_permutation
 25 //******************
 26 clock_t __STRAT,__END;
 27 double __TOTALTIME;
 28 void _MS(){__STRAT=clock();}
 29 void _ME(){__END=clock();__TOTALTIME=(double)(__END-__STRAT)/CLOCKS_PER_SEC;cout<<"Time: "<<__TOTALTIME<<" s"<<endl;}
 30 //***********************
 31 #define rint register int
 32 #define fo(a,b,c) for(rint a=b;a<=c;++a)
 33 #define fr(a,b,c) for(rint a=b;a>=c;--a)
 34 #define mem(a,b) memset(a,b,sizeof(a))
 35 #define pr printf
 36 #define sc scanf
 37 #define ls rt<<1
 38 #define rs rt<<1|1
 39 typedef pair<int,int> PII;
 40 typedef vector<int> VI;
 41 typedef long long ll;
 42 const double E=2.718281828;
 43 const double PI=acos(-1.0);
 44 const ll INF=(1LL<<60);
 45 const int inf=(1<<30);
 46 const double ESP=1e-9;
 47 const int mod=(int)1e9+7;
 48 const int N=(int)1e6+10;
 49 
 50 vector<vector<int> >G(N);
 51 int deep[N];
 52 
 53 struct node
 54 {
 55     int x,dep;
 56 };
 57 bool vis[N];
 58 void bfs(int start)
 59 {
 60     queue<node>q;
 61     q.push({start,1});
 62     while(!q.empty())
 63     {
 64         node now=q.front();q.pop();
 65         deep[now.dep]++;
 66         vis[now.x]=1;
 67         int sz=G[now.x].size();
 68         for(int i=0;i<sz;++i)
 69         {
 70             int to=G[now.x][i];
 71             if(!vis[to])
 72                 q.push({to,now.dep+1});
 73         }
 74     }
 75 }
 76 
 77 int a[N];
 78 int main()
 79 {
 80     int n,k;
 81     sc("%d%d",&n,&k);
 82     for(int i=1;i<=n;++i)
 83     {
 84         sc("%d",&a[i]);
 85         if(a[i]==0)continue;
 86         G[a[i]].push_back(i);
 87         G[i].push_back(a[i]);
 88     }
 89     for(int i=1;i<=n;++i)
 90         if(a[i]==0)
 91             bfs(i);
 92     for(int i=1;i<=n+5;++i)
 93     {
 94         if(deep[i]==0)
 95         {
 96             pr("%d\n",i-1);
 97             break;
 98         }
 99         if(deep[i]>k)
100             deep[i+1]+=deep[i]-k;
101     }
102     return 0;
103 }
104 
105 /**************************************************************************************/

 

Graduation(思维,树上取叶子几次取完)

原文:https://www.cnblogs.com/--HPY-7m/p/11873038.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!