解题:WC 2018 州区划分
WC之前写的,补一补,但是基本就是学新知识了
首先可以枚举子集$3^n$转移,优化是额外记录每个集合选取的个数,然后按照选取个数从小到大转移。转移的时候先FWT成“点值”转移完了IFWT回去乘逆元
沙茶博主也不知道为什么这样就是对的,放个没看懂的yww大佬的博客
// luogu-judger-enable-o2
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=(<<N)+N,K=,mod=;
int mat[N][N],val[N],aset[N],deg[N],inv[N*K];
int sum[M],gain[N][M],dp[N][M],bit[M];
int n,m,p,t1,t2,all,lth;
void Mod(int &x,int y)
{
x+=y;
if(x<) x+=mod;
if(x>=mod) x-=mod;
}
int S(int x)
{
return <<(x-);
}
int Val(int x)
{
return p?(p==?x:1ll*x*x%mod):;
}
int Finda(int x)
{
return aset[x]==x?x:aset[x]=Finda(aset[x]);
}
int Calc(int sta)
{
register int i,j;
int abe=,nde=;
for(i=;i<=n;deg[i]=,i++)
if(sta&S(i)) aset[i]=i;
for(i=;i<=n;i++)
if(sta&S(i))
{
nde=i,sum[sta]+=val[i];
for(j=;j<=n;j++)
if((sta&S(j))&&mat[i][j])
deg[i]++,aset[Finda(j)]=Finda(i);
if(deg[i]%) abe=;
}
int anc=Finda(nde);
for(i=;i<=n;i++)
if(sta&S(i)) abe|=Finda(i)!=anc;
return abe*Val(sum[sta]);
}
void Trans(int *arr,int len,int typ)
{
register int i,j,k;
for(i=;i<=len;i<<=)
{
int lth=i>>;
for(j=;j<len;j+=i)
for(k=j;k<j+lth;k++)
Mod(arr[k+lth],typ*arr[k]);
}
}
void Pre()
{
register int i;
scanf("%d%d%d",&n,&m,&p),lth=<<n,all=lth-;
for(i=;i<=m;i++)
{
scanf("%d%d",&t1,&t2);
mat[t1][t2]=mat[t2][t1]=true;
}
for(i=;i<=n;i++) scanf("%d",&val[i]);
dp[][]=,inv[]=,Trans(dp[],lth,);
for(i=;i<=;i++)
inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
for(i=;i<=all;i++)
bit[i]=bit[i>>]+(i&),gain[bit[i]][i]=Calc(i);
for(i=;i<=n;i++) Trans(gain[i],lth,);
}
int main()
{
Pre();
register int i,j,k;
for(i=;i<=n;i++)
{
for(j=;j<=i;j++)
for(k=;k<=all;k++)
Mod(dp[i][k],1ll*dp[j][k]*gain[i-j][k]%mod);
Trans(dp[i],lth,-);
for(int j=;j<=all;j++)
dp[i][j]=(bit[j]==i)?1ll*dp[i][j]*Val(inv[sum[j]])%mod:;
if(i!=n) Trans(dp[i],lth,);
}
printf("%d",dp[n][all]);
return ;
}
解题:WC 2018 州区划分的更多相关文章
- [WC 2018]州区划分
Description 题库链接 小 \(S\) 现在拥有 \(n\) 座城市,第 \(i\) 座城市的人口为 \(w_i\) ,城市与城市之间可能有双向道路相连. 现在小 \(S\) 要将这 \(n ...
- WC 2018 题解
WC 2018 题解 一些感受.jpg 题目难度相较前些年会相对简单一点?(FAKE.jpg 平均码量符合WC风格?(甚至更多一点 出题人良心! [WC2018] 通道 一个不知道对不对的$\log ...
- WC 2018/CTSC 2018/APIO 2018 游记
(要写CTSC的时候才想起来没写WC2018,那就粗略回顾一下吧hhhhh) WC 2018(简略版): 大概和 一个宁夏和一个天津的大哥一个宿舍hhhh,字典序分宿舍真是奇妙. WC讲课真的不是人听 ...
- UOJ#348. 【WC2018】州区划分
原文链接www.cnblogs.com/zhouzhendong/p/UOJ348.html 前言 第一次知道子集卷积可以自己卷自己. 题解 这是一道子集卷积模板题. 设 $sum[S]$ 表示点集 ...
- [WC2018]州区划分——FWT+DP+FST
题目链接: [WC2018]州区划分 题目大意:给n个点的一个无向图,点有点权,要求将这n个点划分成若干个部分,每部分合法当且仅当这部分中所有点之间的边不能构成欧拉回路.对于一种划分方案,第i个部分的 ...
- 【WC2018】州区划分(FWT,动态规划)
[WC2018]州区划分(FWT,动态规划) 题面 UOJ 洛谷 题解 首先有一个暴力做法(就有\(50\)分了) 先\(O(2^nn^2)\)预处理出每个子集是否合法,然后设\(f[S]\)表示当前 ...
- [WC2018]州区划分
[WC2018]州区划分 注意审题: 1.有序选择 2.若干个州 3.贡献是州满意度的乘积 枚举最后一个州是哪一个,合法时候贡献sum[s]^p,否则贡献0 存在欧拉回路:每个点都是偶度数,且图连通( ...
- 「WC2018」州区划分(FWT)
「WC2018」州区划分(FWT) 我去弄了一个升级版的博客主题,比以前好看多了.感谢 @Wider 不过我有阅读模式的话不知为何 \(\text{LATEX}\) 不能用,所以我就把这个功能删掉了. ...
- UOJ348. 【WC2018】州区划分
UOJ348. [WC2018]州区划分 http://uoj.ac/problem/348 分析: 设\(g(S)=(\sum\limits_{x\in S}w_x)^p[合法]\) \(f(S)\ ...
随机推荐
- Python3入门(七)——模块
在Python中,一个.py文件就称之为一个模块(Module).(例如main.py就称之为main模块) 为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package). ...
- 20155207 EXP6 信息搜集与漏洞扫描
20155207 EXP6 信息搜集与漏洞扫描 基础问题回答 1)哪些组织负责DNS,IP的管理. ICANN统一管理全球根服务器 全球根域名服务器(13台) 地区性注册机构(5个)ARIN RIPE ...
- STM32一键下载电路设计原理
先放原理图(补充:图中的BOOT0通过10K的电阻接到地),再解释为什么这么设计: STM32启动方式:BOOT0和 BOOT1用于设置 STM32的启动方式 ,见下表: BOOT0=1,BOOT1= ...
- Hadoop日记Day7---HDFS的WED端口
HDFS 对外提供了可供访问的http server,开放了很多端口,下面介绍常用的几个端口(http://hadoop:……). 一.50070 端口,查看NameNode 状态,如图1.1所示. ...
- java.lang.IllegalStateException: Cannot forward after response has been committe
参考:https://blog.csdn.net/lewky_liu/article/details/79845655 加上 return 搞定
- SSIS 事件的向上传递
在SSIS中,Package是Task组件的有序组合,具有层次结构,Package处于层次结构的顶层(Root Level),对于父子包结构,父包(Parent Package)通过Execute P ...
- 行级安全(Row-Level Security)
通过授予和拒绝(Grant/Deny)命令控制用户的权限,只能控制用户对数据库对象的访问权限,这意味着,用户访问的粒度是对象整体,可以是一个数据表,或视图等,用户要么能够访问数据库对象,要么没有权限访 ...
- react脚手架改造(react/react-router/redux/eslint/karam/immutable/es6/webpack/Redux DevTools)
公司突然组织需要重新搭建一个基于node的论坛系统,前端采用react,上网找了一些脚手架,或多或少不能满足自己的需求,最终在基于YeoMan的react脚手架generator-react-webp ...
- Jmeter(九)_获取JDBC响应做接口关联
在之前的文章-参数关联中,留个一个小尾巴,这里补充一下 http://www.cnblogs.com/Zfc-Cjk/p/8295495.html 1:从sql表中将需要取的数据查出来 2:我们需要把 ...
- [文章存档]Azure上部署的java app在向第三方服务传送中文时出现乱码
https://docs.azure.cn/zh-cn/articles/azure-operations-guide/app-service-web/aog-app-service-web-java ...