【思维题】【生成树计数】BZOJ 2467 —— 生成树

4 篇文章 0 订阅
1 篇文章 0 订阅

题目传送门

思维题?

利用破圈算法的思想,想要将每一个环都删去一条边.首先考虑周围的五边形,每一个五边形都是一个环所以要删掉一条边,注意.观察剩下的图后发现有两种情况.

  • 中心多边形和周围五边形剩下的边组成了一个环
  • 周围五边形连起来构成了一个环

不论哪种情况,我们都还需要删除一条边.对于情况1,删除一条中心多边形上的边.对于情况2,有些特殊.之所以能够达到情况2,是五边形删边的时都删除了与中心多边形共用的边,所以我们随意在剩下的多边形上删边即可.

总结以上两种情况,可以发现,只有一个五边形被删了两条边,并且其中一条是与中心多边形公用的边.其他的五边形只需随便删一条边.则答案为 4 ∗ n ∗ 5 n − 1 4*n*5^{n-1} 4n5n1

#include<cstdio>
#include<algorithm>
using namespace std;

const int MOD=2007;

int ksm(int x,int y){
    int res=1;
    while(y){
        if(y&1) res=res*x%MOD;
        x=x*x%MOD;
        y>>=1;
    }
    return res;
}

int main(){
    int T,n;
    scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        printf("%d\n",4*n*ksm(5,n-1)%MOD);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值