zoukankan      html  css  js  c++  java
  • bzoj 2560: 串珠子

    Description

      铭铭有n个十分漂亮的珠子和若干根颜色不同的绳子。现在铭铭想用绳子把所有的珠子连接成一个整体。
      现在已知所有珠子互不相同,用整数1到n编号。对于第i个珠子和第j个珠子,可以选择不用绳子连接,或者在ci,j根不同颜色的绳子中选择一根将它们连接。如果把珠子看作点,把绳子看作边,将所有珠子连成一个整体即为所有点构成一个连通图。特别地,珠子不能和自己连接。
      铭铭希望知道总共有多少种不同的方案将所有珠子连成一个整体。由于答案可能很大,因此只需输出答案对1000000007取模的结果

    Solution

    用总数减去不连通的就是答案
    (f[S]) 表示 (S) 集合中,所有点连通的图的方案.
    (g[S]) 表示 (S) 集合中任意连边.
    (f[S]=g[S]-sum_{S'∈S}f[S']*g[S)^(S'])
    玩样例发现,这样做会减多,因为 (g[S)^(S']) 的方案中也有连通图,所以在连通时(f[S'])(g[S)^(S'])是对称的,会重复
    所以需要强制定一个节点作为代表元,(S')集合必须包含这个点
    神奇的是:
    按理来说写成这样才对:

      for(int i=1;i<=m;i++){
        for(int S=i&(i-1);S;S=i&(S-1))
          if(!((i^S)&(i&(-i))))f[i]=(f[i]+1ll*f[S]*g[i^S])%mod;
        f[i]=(g[i]-f[i]+mod)%mod;
      }
    

    写成这样也对了,懵逼.jpg

      for(int i=1;i<=m;i++){
        for(int S=i&(i-1);S;S=i&(S-1))
          if(!((i^S)&1))f[i]=(f[i]+1ll*f[S]*g[i^S])%mod;
        f[i]=(g[i]-f[i]+mod)%mod;
    
    #include<bits/stdc++.h>
    using namespace std;
    const int N=18,mod=1e9+7;
    int f[1<<16],g[1<<16],c[N][N],n;
    int main(){
      freopen("pp.in","r",stdin);
      freopen("pp.out","w",stdout);
      scanf("%d",&n);
      for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
          scanf("%d",&c[i][j]);
      int m=(1<<n)-1;
      for(int i=0;i<=m;i++){
        g[i]=1;
        for(int j=1;j<=n;j++)
          if(i&(1<<(j-1)))
    	for(int k=j+1;k<=n;k++)
    	  if((i&(1<<(k-1))))g[i]=1ll*g[i]*(c[j][k]+1)%mod;
      }
      for(int i=1;i<=m;i++){
        for(int S=i&(i-1);S;S=i&(S-1))
          if(!((i^S)&1))f[i]=(f[i]+1ll*f[S]*g[i^S])%mod;
        f[i]=(g[i]-f[i]+mod)%mod;
      }
      printf("%d
    ",f[m]);
      return 0;
    }
    
    
  • 相关阅读:
    微信小程序加密解密 C# 以及 填充无效,无法被移除错误的解决方案 Padding is invalid and cannot be removed
    腾讯云 docker 镜像 dotnet/core sdk aspnet
    ImageMagick PDF到JPG有时会导致黑色背景
    VS2019 发布单文件
    MySQL 更新语句执行过程 WAL redolog binlog
    MySQL 查询语句执行过程
    让MySQL为我们记录执行流程
    SQL基础随记1 SQL分类 常用函数 ALL ANY EXISTS IN 约束
    初用MySQL Mysql示例库 Navicat15
    OldTrafford after 102 days
  • 原文地址:https://www.cnblogs.com/Yuzao/p/8439117.html
Copyright © 2011-2022 走看看