博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[WC2018]州区划分
阅读量:5972 次
发布时间:2019-06-19

本文共 1402 字,大约阅读时间需要 4 分钟。

注意审题:

1.有序选择

2.若干个州

3.贡献是州满意度的乘积

枚举最后一个州是哪一个,合法时候贡献sum[s]^p,否则贡献0

存在欧拉回路:每个点都是偶度数,且图连通(dfs验证)

然后愉快子集卷积即可。

 

PS:

FMT辣鸡,

FWT可以节省一倍的常数!这样才能通过此题

#include
#define reg register int#define il inline#define fi first#define se second#define mk(a,b) make_pair(a,b)#define numb (ch^'0')using namespace std;typedef long long ll;template
il void rd(T &x){ char ch;x=0;bool fl=false; while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true); for(x=numb;isdigit(ch=getchar());x=x*10+numb); (fl==true)&&(x=-x);}template
il void output(T x){
if(x/10)output(x/10);putchar(x%10+'0');}template
il void ot(T x){
if(x<0) putchar('-'),x=-x;output(x);putchar(' ');}template
il void prt(T a[],int st,int nd){
for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');}namespace Miracle{const int N=24;const int mod=998244353;int n,m,p;int qm(int x,int y){ int ret=1; while(y){ if(y&1) ret=(ll)ret*x%mod; x=(ll)x*x%mod; y>>=1; } return ret;}int ad(int x,int y){ return x+y>=mod?x+y-mod:x+y;}int f[N][1<<21];int g[N][1<<21];int w[N],sum[1<<21];int sz[1<<21];int to[N];void FWT(int *f,int n){ for(reg p=2;p<=n;p<<=1){ for(reg l=0;l
>1]+(i&1); for(reg j=0;j
0){ // cout<<" val "<
<
View Code

 

转载于:https://www.cnblogs.com/Miracevin/p/10726263.html

你可能感兴趣的文章
Idea debugger 无法启动-unable to open debugger port , java.net.SocketException "socket closed"
查看>>
模式和原则[转载]
查看>>
[Codeforces958F2]Lightsabers (medium)(思维)
查看>>
获取非行间样式
查看>>
java String format占位符
查看>>
JAVA spring配置文件总结
查看>>
Java5的 线程并发库
查看>>
HDOJ 1036 输入输出 水
查看>>
Java 安装后的检测是否安装成功
查看>>
设备及分辨率
查看>>
mybatis拦截器
查看>>
App重新启动
查看>>
矩阵乘法
查看>>
得到目标元素距离视口的距离以及元素自身的宽度与高度(用于浮层位置的动态改变)...
查看>>
安装和配置Tomcat
查看>>
实验三
查看>>
第一次实验总结
查看>>
openssh for windows
查看>>
PostgreSQL cheatSheet
查看>>
vue ...mapMutations 的第一个参数默认为 数据对象state
查看>>