codeforces 423 D. High Load 构造一个思维的树

xiaoxiao2021-02-28  28

构造一个思维的树

题意:

​ 有n个节点,其中有k个特殊节点,特殊的节点只能连接一条边,其它的至少两条边。问如何连接才能使得特殊节点的最远距离最短,输出一种方案。

思路:

​ 可以看出连接时分层的,最外层只能是K个特殊节点,根据这样的性质可以直接得出最远距离,当(n-1)%k == 0的时候说明恰好有(n-1)/2层,其距离为乘以2,当有余数为1的时候 2+12+2 .画图可以很容易理解。对于连接方式:按层次输出即可。

#include <iostream> #include <cstdio> #include <cstring> using namespace std; int main() { //freopen("in.txt","r",stdin); int n,k; int Dist; scanf("%d%d",&n,&k); if((n-1)%k == 0) Dist = (n-1)/k*2; else if((n-1)%k == 1) Dist = (n-1)/k*2 + 1; else Dist = (n-1)/k*2 + 2; printf("%d\n",Dist); for(int i = 2;i <= k+1; i++) printf("1 %d\n",i); for(int i = k+2;i <= n; i++) printf("%d %d\n",i-k,i); return 0; }
转载请注明原文地址: https://www.6miu.com/read-1000120.html

最新回复(0)