博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 3696: 化合物
阅读量:5232 次
发布时间:2019-06-14

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

哦,这个困惑了我好久的东西——生成函数(母函数),(然而拿这个东西去向学文化课的同学装逼并不成功。。。)

生成函数,就是把原来的加法组合变成乘法的指数加法,那么我们要求的值就是相应的指数的系数的值啦,是不是很神奇??(2333我好像又不会了。。)

那么这个题就是抑或规则下的生成函数(扒自某题解),把指数的加法变成抑或就可以。。

1 #include 
2 #define LL long long 3 using namespace std; 4 inline int ra() 5 { 6 int x=0,f=1; char ch=getchar(); 7 while (ch<'0' || ch>'9') {
if (ch=='-') f=-1; ch=getchar();} 8 while (ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();} 9 return x*f;10 }11 int n,cnt;12 int a[100005][505];13 int ans[512],head[100005],deep[100005];14 struct edge{15 int to,next;16 }e[100005];17 void insert(int x, int y){18 e[++cnt].to=y; e[cnt].next=head[x]; head[x]=cnt;19 }20 void dfs(int x)21 {22 a[x][0]=1;23 for (int i=head[x];i;i=e[i].next)24 {25 dfs(e[i].to);26 for (int j=0; j<=deep[x];j++)27 for (int k=0; k<=deep[e[i].to]; k++)28 ans[j^(k+1)]+=a[x][j]*a[e[i].to][k];29 deep[x]=max(deep[x],deep[e[i].to]+1);30 for (int j=0; j<=deep[e[i].to]; j++)31 a[x][j+1]+=a[e[i].to][j];32 }33 }34 int main(int argc, char const *argv[])35 {36 n=ra();37 for (int i=2; i<=n; i++)38 insert(ra(),i);39 dfs(1); int mx=512;40 for (; mx ; mx--) if (ans[mx]) break;41 for (int i=0; i<=mx; i++) printf("%d\n",ans[i]);42 return 0;43 }

 

转载于:https://www.cnblogs.com/ccd2333/p/6512022.html

你可能感兴趣的文章
BZOJ 1001--[BeiJing2006]狼抓兔子(最短路&对偶图)
查看>>
C# Dynamic通用反序列化Json类型并遍历属性比较
查看>>
128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列
查看>>
定制jackson的自定义序列化(null值的处理)
查看>>
auth模块
查看>>
javascript keycode大全
查看>>
前台freemark获取后台的值
查看>>
log4j.properties的作用
查看>>
游戏偶感
查看>>
Leetcode: Unique Binary Search Trees II
查看>>
C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
Spring-hibernate整合
查看>>
c++ map
查看>>
exit和return的区别
查看>>
discuz 常用脚本格式化数据
查看>>
洛谷P2777
查看>>
PHPStorm2017设置字体与设置浏览器访问
查看>>
SQL查询总结 - wanglei
查看>>
安装cocoa pods时出现Operation not permitted - /usr/bin/xcodeproj的问题
查看>>
GIT笔记:将项目发布到码云
查看>>