CodeForces Round#423 Div2D&Div1B(827B) Solution
来源:互联网 发布:大数据高并发 面试题 编辑:程序博客网 时间:2024/06/06 01:03
题意:要求输出一棵树的形态(即树的边),要求:总共有n个点,其中k个叶子节点(度为1),并且这棵树的直径要最小。
题解:考虑一棵树,先画出一条直径,现在假设这个直径是最小的,那么现在考虑如何向直径链上加入树的所有节点,且不使得树的直径变大,学过均值的同学都知道要找到直径的中点,然后向外延伸一条链(树枝),否则,如果更偏左边一些,那么直径的右链和新加入的链的直径会超过原有直径。而我们又想让一条链可以消耗尽可能少的叶子数量,并且带有尽可能多的节点,那么显然就是没有枝杈的赤裸裸的链最节省叶子节点数。那么现在这棵树的形态一定是:一个根节点,向外辐射出若干条赤裸的链。再来考虑致敬最小这个条件,我们希望每条链平摊最少的节点,那么就平均分就可以了,最后多的几个就分到不同的链上一条链一个就好了。说了半天…………其实就是找一个根节点,然后向外长k个链,转着圈加节点就行了。。
Code:
#include<bits/stdc++.h>using namespace std;#define MAXN 200005int length[MAXN];int n,k;int main(){ cin>>n>>k; n--; int delta = n%k; int length = n/k; int now =1; if (delta>=2){ cout<<2*(length+1)<<endl; }else if (delta==1){ cout<<2*length+1<<endl; }else{ cout<<2*length<<endl; } for (int i=0;i<delta;i++){ now++; cout<<"1 "<<now<<endl; for (int j=1;j<length+1;j++){ now++; cout<<now<<" "<<now-1<<endl; } } for (int i=0;i<k-delta;i++){ now++; cout<<"1 "<<now<<endl; for (int j=1;j<length;j++){ now++; cout<<now<<" "<<now-1<<endl; } } return 0;}
阅读全文
0 0
- CodeForces Round#423 Div2D&Div1B(827B) Solution
- codeforces 850B Round #432 Div2D & Div1B:数论+计数
- CodeForces 833B Round#426 Div1B&Div2D The Bakery: DP+线段树
- Codeforces 853B Round #433 Div2D& Div1B Jury Meeting:差分前缀和+模拟
- CodeForces Round #423 Div2C&Div1A(827A) Solution
- codeforces round260 div1B&div2D A Lot of Games字典树上博弈
- [Codeforces Round #286 DIV1B (CF506B)] Mr. Kitayuta's Technology
- [Codeforces Round #310 DIV1B (CF555B)] Case of Fugitive
- [Codeforces Round #372 DIV1B (CF715B)] Complete The Graph
- [Codeforces Round #354 DIV2D (CF676D)] Theseus and labyrinth
- [Codeforces Round #357 DIV2D (CF681D)] Gifts by the List
- Codeforces 835D Round #427 Div2D :回文串DP
- [Codeforces Round #428 DIV2D (CF839D)] Winter is here
- Codeforces Round #383 (Div. 2) B. Arpa’s obvious problem and Mehrdad’s terrible solution(模拟)
- Codeforces Round #383 (Div. 2) B. Arpa’s obvious problem and Mehrdad’s terrible solution(STL乱搞)
- CodeForces 827C Round#423 Div2E&Div1C Solution:树状数组或其他
- CodeForces 827E Round$423 Div1E Solution:暴力的正确姿势
- codeforces 362 div2D Puzzles
- 数据库三大范式
- 封装方法:只能输入 数字
- C++实现局域网双向通信(socket)
- Python学习笔记之os模块
- 暑假集训 安迪的字典
- CodeForces Round#423 Div2D&Div1B(827B) Solution
- tensorflow安装错误
- 联机算法——最大子数组问题
- js: 0.1+0.2
- redis-SDS 分析
- 通过retf和调用门实现特权级转换
- 机器学习资料
- CentOS上如何安装RAID阵列以及如何补装图形界面
- TCP/IP 以及TCP与UDP的区别