UOJ #460. 新年的拯救计划 神仙题+构造

对于这个神仙题,我还能说什么~

第一个答案=$n/2$ 还是比较好猜的. 

对于构造这个树,大概就是先从 $1$ 号节点向 $n/2$ 距离以内都连一条边,再在第 $n/2$ 个节点进行这个操作,然后从 $2$ 开始.....

你会发现不合法的情况就是有重边,然而这个是循环的,第 $n/2+1$ 次才会重,所以是可行的. 

#include <cstdio> 
#include <algorithm>
#define setIO(s) freopen(s".in","r",stdin) 
using namespace std; 
int main() {
    // setIO("input"); 
    int n,i,j,m; 
    scanf("%d",&n); 
    printf("%d\n",m=(n>>1)); 
    for(i=1;i<=m;++i) {
        for(j=1;j<=m;++j) printf("%d %d ",i,i+j); 
        for(j=1;j<n-m;++j) printf("%d %d ",i+m,(i+m+j-1)%n+1); 
        printf("\n");   
    }
    return 0; 
}

  

posted @ 2019-08-22 16:23  EM-LGH  阅读(209)  评论(0编辑  收藏  举报