题解 | #小y的树#

小y的树

https://ac.nowcoder.com/acm/contest/11186/B

B题 推公式

赛时一直在推公式,赛后才做出来

n=1ans=0n=1\quad ans=0

n=2ans=k2n=2\quad ans=k^2

n=3ans=2k3+2k4n=3\quad ans=2k^3+2k^4

n=4ans=3k4+4k5+3k6n=4\quad ans=3k^4+4k^5+3k^6

n=5ans=4k5+6k6+6k7+4k8n=5\quad ans=4k^5+6k^6+6k^7+4k^8

这几个全靠手推,然后找规律

...

ans=i=1n1i(ni)kn+i1 ans=\sum_{i=1}^{n-1}i(n-i)k^{n+i-1}

代码

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const ll MOD=1e9+7;
ll pow2(ll a,ll b,ll mod){ll r=1;while(b){if(b&1)r=r*a%mod;a=a*a%mod;b>>=1;}return r%mod;}
ll n,k,ans;
int main(){
    cin>>n>>k;
    ll x=pow2(k,n,MOD);
    for(int i=1;i<n;i++)
        ans=(ans+i*(n-i)%MOD*x)%MOD,x=x*k%MOD;
    cout<<ans;
}

全部评论
其实可以换个思路,针对每条边考虑,因为每条边都是树的割边,因此每条边的对答案的贡献为边两端所含点的数量的乘积 因此只要考虑n-1层边即可,第i层边的下端点集为一棵高为n-i的子树,其节点个数可以预处理出来,另外一端的节点数就是all-该子树的点数 然而我一直把n用成k,wa死了
6 回复 分享
发布于 2022-02-25 09:29

相关推荐

谁知道呢_:要掉小珍珠了,库库学三年,这个结果
点赞 评论 收藏
分享
评论
18
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务