zoukankan      html  css  js  c++  java
  • 2019.03.02 ZJOI2019模拟赛 解题报告

    得分: (10+0+40=50)(T1)(T3)只能写大暴力,(T2)压根不会)

    (T1):道路建造

    应该是一道比较经典的容斥题,可惜比赛时没有看出来。

    由于要求最后删一条边或加一条边后得到一个欧拉回路。而反过来说,对于一个欧拉回路,我们有(C_n^2)种方式加边或删边使其变成一个题目中所求的合法图。

    因此,我们只需求出欧拉回路图的个数,然后乘上(C_n^2)即为答案。

    但还有一个比较麻烦的问题是,这张图必须联通。

    那我们就可以先计算出所有情况数,再减去不连通的情况数即可求出连通的情况数。

    设所有情况数为(g_i),连通的情况数为(f_i)

    当有(i)个点时,对于所有情况,我们可以计算得出这样一个式子:(g_i=2^{C_{i-1}^2})

    证明:我们可以先去掉一个点,则总边数为(C_{i-1}^2),而由这(i-1)个点所构成的图便有(2^{C_{i-1}^2})种情况。而对于最后一个点,我们可以用其向所有奇点连边使其变为偶点,这样就可以得到一个欧拉回路图了。

    那么接下来的问题就是如何求(f_i)

    我们可以枚举一个(j)来将这(i)个点分为(j)(i-j)两部分,然后强制其不连通即可得到不连通的情况数。然后用(g_i)减去它,就得到这样一个式子:(f_i=g_i-sum_{j=1}^{i-1}f_j*g_{i-j}*C_{i-1}^{j-1})

    最后答案自然就是(C_n^2*f_n)

    代码实现如下:

    #include<bits/stdc++.h>
    #define Tp template<typename Ty>
    #define Ts template<typename Ty,typename... Ar>
    #define Reg register
    #define RI Reg int
    #define Con const
    #define CI Con int&
    #define I inline
    #define W while
    #define N 2000
    #define X 1000000007
    #define Qinv(x) (Qpow(x,X-2))
    #define Dec(x,y) ((x-=(y))<0&&(x+=X))
    #define Qinv(x) Qpow(x,X-2)
    #define C(x,y) (1LL*Fac[x]*Inv[y]%X*Inv[(x)-(y)]%X)
    using namespace std;
    int n,f[N+5],g[N+5],Fac[N+5],Inv[N+5];
    I int Qpow(RI x,RI y) {RI res=1;W(y) y&1&&(res=1LL*res*x%X),x=1LL*x*x%X,y>>=1;return res;}//快速幂
    int main()
    {
    	freopen("road.in","r",stdin),freopen("road.out","w",stdout);
    	RI i,j;for(scanf("%d",&n),Fac[0]=i=1;i<=n;++i) Fac[i]=1LL*Fac[i-1]*i%X;//预处理阶乘
    	for(Inv[n]=Qinv(Fac[n]),i=n-1;~i;--i) Inv[i]=1LL*Inv[i+1]*(i+1)%X;//预处理阶乘逆元
    	for(i=1;i<=n;++i) for(f[i]=g[i]=Qpow(2,C(i-1,2)),j=1;j^i;++j) Dec(f[i],1LL*f[j]*g[i-j]%X*C(i-1,j-1)%X);//求出f[i]和g[i]
    	return printf("%d",1LL*C(n,2)*f[n]%X),0;//计算并输出答案
    }
    

    (T2):圈地游戏

    待订正ing

    (T3):组合数学

    待订正ing

  • 相关阅读:
    【VUE】5.路由导航守卫
    【VUE】4.配置axios发起请求
    【VUE】3.表单操作
    【GIT】命令笔记
    【VUE】2.渲染组件&重定向路由
    【Vue】1.前端项目初始化
    【PYTHON】操作excel笔记
    【Python】python 入门与进阶
    【flask-migrate】:ERROR [root] Error: Target database is not up to date.
    【Flask】学习笔记(一)入门
  • 原文地址:https://www.cnblogs.com/chenxiaoran666/p/Contest20190302.html
Copyright © 2011-2022 走看看