CodeForces 828D High Road
2017-08-09 20:36
381 查看
题目链接:https://vjudge.net/problem/CodeForces-828D
当(n-1)%k==0时,最远距离为2*(n-1)/k;
当(n-1)%k==1时,最远距离为2*((n-1)/k)+1;
当(n-1)%k>=2时,最远距离为2*((n-1)/k)+2。
题意:
有n个节点,这n个节点中有k个叶子节点,构造成一棵树,请给出一个最优方案,使得树的直径最小。思路:
在保证是一棵树且使得树的直径最小,可以想象,像树的年轮一样一层一层往外扩展,才能满足题目条件。最中间放一个节点,然后每一圈的长度为k(保证有k个叶子),一圈一圈往外放。当(n-1)%k==0时,最远距离为2*(n-1)/k;
当(n-1)%k==1时,最远距离为2*((n-1)/k)+1;
当(n-1)%k>=2时,最远距离为2*((n-1)/k)+2。
总结:
比赛时像在梦游。代码:
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #include <queue> #include <vector> using namespace std; int main(){ int n, k; cin>>n>>k; int tmp = 2*((n-1)/k); int yu = (n-1)%k; if(yu==1) ++tmp; if(yu>=2) tmp += 2; cout<<tmp<<endl; int idx = 1; for(int i=1; i<=k; ++i){ cout<<++idx<<" "<<1<<endl; } while(idx<n){ for(int i=1; i<=k&&idx<n; ++i){ ++idx; cout<<idx<<" "<<idx-k<<endl; } } return 0; }
相关文章推荐
- CodeForces - 828D High Load[构造+图]
- Codeforces 828D High Load【贪心+求树的最长链】
- Codeforces 828D High Load (构造)
- Codeforces(738C)-Road to Cinema
- codeforces 543D D. Road Improvement(树形dp)
- 【CodeForces】702D - Road to Post Office 模拟,初中数学题
- CodeForces 24A-Ring road
- CodeForces - 828D
- codeforces 703 C. Chris and Road
- Codeforces 828 D High Load
- codeforces-702D-Road to Post Office
- CodeForces-702D Road to Post Office(初中数学脑洞题)
- Codeforces 875D High Cry [枚举+二进制]
- Codeforces 827B. High Load 【构造】
- codeforces 867 E Buy Low Sell High(优先队列)
- 【Codeforces 729 C Road to Cinema】 + 二分
- CodeForces 24A Ring road (简单题)
- Codeforces 875D High Cry st表+分治
- [Codeforces] 876F. High Cry
- codeforces - 703C - Chris and Road(几何)