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

  • 相关阅读:
    poj 2763 Housewife Wind
    hdu 3966 Aragorn's Story
    poj 1655 Balancing Act 求树的重心
    有上下界的网络流问题
    URAL 1277 Cops and Thieves 最小割 无向图点带权点连通度
    ZOJ 2532 Internship 网络流求关键边
    ZOJ 2760 How Many Shortest Path 最大流+floyd求最短路
    SGU 438 The Glorious Karlutka River =) 拆点+动态流+最大流
    怎么样仿写已知网址的网页?
    5-10 公路村村通 (30分)
  • 原文地址:https://www.cnblogs.com/chenxiaoran666/p/Contest20190302.html
Copyright © 2011-2022 走看看