AtCoder Grand Contest 005 F - Many Easy Problems

7人阅读 评论(0) 收藏 举报
分类:

题意:

f(k)表示在树上任选k个点所组成的最小联通块大小的和。
求出所有f(k)

题解:

这种题一般都单独考虑每个点的贡献。
单点贡献显然就是Cnkyson[x]Csize[y]k
所以ans[k]=x=1nCnkyson[x]Csize[y]k
观察发现无论k取多少,cik的系数都是不变的,设为a[i]
ans[k]=ina[i]Cik
这个式子就可以卷积了。
code:

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
const LL p=924844033,yg=5;
LL n;
struct node{
    LL y,next;
}a[400010];LL len=0,last[200010];
LL f[200010],inv[200010],A[800010],B[800010],bin[800010];
void ins(LL x,LL y)
{
    a[++len].y=y;
    a[len].next=last[x];last[x]=len;
}
void pre()
{
    f[0]=f[1]=inv[0]=inv[1]=1;
    for(LL i=2;i<=200000;i++) f[i]=f[i-1]*i%p,inv[i]=(p-p/i)*inv[p%i]%p;
    for(LL i=2;i<=200000;i++) inv[i]=inv[i-1]*inv[i]%p;
}
LL pow(LL a,LL b)
{
    LL ans=1;
    while(b)
    {
        if(b&1) ans=ans*a%p;
        a=a*a%p;b>>=1;
    }
    return ans;
}
LL size[200010];
void ntt(LL *a,LL n,LL op)
{
    for(LL i=0;i<n;i++) bin[i]=(bin[i>>1]>>1)|((i&1)*(n>>1));
    for(LL i=0;i<n;i++) if(i<bin[i]) swap(a[i],a[bin[i]]);
    for(LL i=1;i<n;i<<=1)
    {
        LL wn=pow(yg,op==1?(p-1)/(2*i):(p-1)-(p-1)/(2*i)),w,t;
        for(LL j=0;j<n;j+=i<<1)
        {
            w=1;
            for(LL k=0;k<i;k++)
            {
                t=a[i+j+k]*w%p;w=w*wn%p;
                a[i+j+k]=(a[j+k]-t+p)%p;a[j+k]=(a[j+k]+t)%p;
            }
        }
    }
    if(op==-1)
    {
        LL Inv=pow(n,p-2);
        for(LL i=0;i<n;i++) a[i]=a[i]*Inv%p;
    }
}
void dfs(LL x,LL fa)
{
    size[x]=1;A[n]++;
    for(LL i=last[x];i;i=a[i].next)
    {
        LL y=a[i].y;
        if(y==fa) continue;
        dfs(y,x);size[x]+=size[y];
        A[size[y]]--;
    }
    if(n-size[x]) A[n-size[x]]--;
}
int main()
{
    scanf("%lld",&n);
    for(LL i=1;i<n;i++)
    {
        LL x,y;scanf("%lld %lld",&x,&y);
        ins(x,y);ins(y,x);
    }
    pre();dfs(1,0);
    for(LL i=0;i<=n;i++) B[i]=inv[i],A[i]+=A[i]<0?p:0,A[i]=A[i]*f[i]%p;
    reverse(B,B+n+1);
    LL N=1;while(N<(n+1)<<1) N<<=1;
    ntt(A,N,1);ntt(B,N,1);
    for(LL i=0;i<N;i++) A[i]=A[i]*B[i]%p;
    ntt(A,N,-1);
    for(LL i=1;i<=n;i++) printf("%lld\n",inv[i]*A[n+i]%p);
}
查看评论

AGC005F:Many Easy Problems (计数原理+NTT)

题目传送门:https://agc005.contest.atcoder.jp/tasks/agc005_f?lang=en vjudge题面传送门:https://vjudge.net/probl...
  • KsCla
  • KsCla
  • 2018-02-16 11:30:26
  • 87

[FFT] Atcoder AGC005F. Many Easy Problems

每个点的贡献是这个点出现在多少个方案中 方案数是 (nk)−∑(Sik){n\choose k}-\sum{S_i\choose k},SiS_i 表示删去这个点后剩下的子树的大小那么答案就是n(n...
  • Coldef
  • Coldef
  • 2017-12-22 18:50:51
  • 130

【AGC005F】Many Easy Problems FFT 容斥原理

题目大意  给你一棵树,有nn个点。还给你了一个整数kk。  设SS为树上某些点的集合,定义f(S)f(S)为最小的包含SS的联通子图的大小。  nn个点选kk个点一共有(nk)\binom{n}{k...
  • ez_yww
  • ez_yww
  • 2017-10-26 19:14:29
  • 181

【AtCoder】(AtCoder Grand Contest 006)D - Median Pyramid Hard

【AtCoder】(AtCoder Grand Contest 006)D - Median Pyramid Hard 传送门:http://agc006.contest.atcoder.jp/tas...
  • Pure_W
  • Pure_W
  • 2017-03-02 07:37:53
  • 331

AtCoder Grand Contest 019 F - Yes or No

链接:link题意:有n+mn+m个询问,其中nn个是YES,mm个是NO,你回答一个问题之后会知道这个问题的答案,求最优策略下你期望对多少个。题解:显然最优策略是回答多的那个。 不妨设n≥mn\g...
  • wxh010910
  • wxh010910
  • 2017-08-31 20:46:20
  • 760

Atcoder Grand Contest 011F - Train Service Planning

Problem Statement There is a railroad in Takahashi Kingdom. The railroad consists of N sections, nu...
  • wxh010910
  • wxh010910
  • 2017-03-19 14:01:43
  • 474

AtCoder Grand Contest 005 C - Tree Restoring 构造

题意 给出一个序列a[1..n],问能否构造一棵树使得第i个点到最远点的距离恰好为a[i]。 n&amp;lt;=100 分析 有个结论就是任意一个点到树中的最远点必然是直径两个端点中的一...
  • qq_33229466
  • qq_33229466
  • 2018-02-13 11:24:21
  • 87

AtCoder Grand Contest 005【A栈模拟,B单调栈】

挖草,AtCoder实在是太吊了~ %%%,目前只A了两题; A题: 就是利用栈模拟一下就好了;S进栈,T的话有S就出栈,然后len减一下就好了;#include using namespac...
  • KEYboarderQQ
  • KEYboarderQQ
  • 2016-10-01 22:43:50
  • 457

AtCoder Grand Contest 011 A\B 贪心、二分

A - Airport Bus 時間制限 : 2sec / メモリ制限 : 256MB 配点 : 300 点 問題文 高橋空港には,毎日飛行機で N 人の乗客が到着しま...
  • kyoma
  • kyoma
  • 2017-03-12 21:58:00
  • 284

Minimum Sum(二分+RMQ查找下标) AtCoder Grand Contest 005

Minimum Sum 题目描述 One day, Snuke was given a permutation of length N, a1,a2,…,aN, from his fr...
  • sxh759151483
  • sxh759151483
  • 2018-04-15 18:28:09
  • 5
    个人资料
    持之以恒
    等级:
    访问量: 3万+
    积分: 3969
    排名: 9782
    最新评论