YbtOJ#20068-[NOIP2020模拟赛B组Day5]连通子图【构造】
生活随笔
收集整理的這篇文章主要介紹了
YbtOJ#20068-[NOIP2020模拟赛B组Day5]连通子图【构造】
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
正題
題目鏈接:http://noip.ybtoj.com.cn/contest/102/problem/2
題目大意
求構(gòu)造一個(gè)包含根節(jié)點(diǎn)的聯(lián)通子圖kkk個(gè)的樹。
解題思路
現(xiàn)在考慮一棵樹,如果我們?cè)诟?jié)點(diǎn)處加一個(gè)點(diǎn),那么方案數(shù)會(huì)×2\times 2×2。如果在根節(jié)點(diǎn)上加入一個(gè)父節(jié)點(diǎn)(根會(huì)轉(zhuǎn)移上去),那么方案數(shù)會(huì)+1+1+1。這樣點(diǎn)數(shù)是log?\loglog級(jí)別的,能夠通過本題。
codecodecode
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct node{int x,y; }a[1100]; int n,last,cnt,tot; int main() { // freopen("b.in","r",stdin); // freopen("b.out","w",stdout);while(scanf("%d",&n)!=EOF){last=cnt=1;tot=0;while(n>1){if(n&1)a[++tot]=(node){last,++cnt},n--,last=cnt;else a[++tot]=(node){last,++cnt},n/=2;}printf("%d\n",cnt);for(int i=1;i<=tot;i++)printf("%d %d\n",a[i].x,a[i].y);} }總結(jié)
以上是生活随笔為你收集整理的YbtOJ#20068-[NOIP2020模拟赛B组Day5]连通子图【构造】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: YbtOJ#20070-[NOIP202
- 下一篇: 薛定谔的猫为什么可怕 可怕在哪里