摘要: 这题需要把状转方程想清楚,在动手打代码。 可能大多数人像我一样第一反应是这样的: f[x][0]=0,f[x][1]=1; for(int i=beg[x];i;i=nex[i]) if(to[i]!=fa){ dfs(to[i],x); f[x][0]+=f[to[i]][1]; f[x][1]+ 阅读全文
posted @ 2020-03-11 12:34 syzf2222 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 我觉得我好像已经理解树形背包了。 套路化的树形背包。 递推公式长这样:f[i][j]=max(f[i][j],f[i][j-k]+f[t][k]); 注意f[i][0]应该在最后附为0,不然就相当于是取前m大了。 看代码: #include<bits/stdc++.h> using namespac 阅读全文
posted @ 2020-03-11 11:49 syzf2222 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 这是蒟蒻的第一道树形背包,由于不知道套路,几乎全抄的题解(惭愧)。 有点类似于CDQ分治的思想,先处理下级,然后利用下级的数据推本级。 其实我还没有理解透彻,不过贡献一下代码也是有价值的。 #include<bits/stdc++.h> using namespace std; #define in 阅读全文
posted @ 2020-03-10 22:17 syzf2222 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 这是一个树形dp入门题。 f[x][i]=max{f[lc[x]][i-1]+lw[x],f[rc[x]][i-1]+rw[x],lw[x]+rw[x]+f[lc[x]][j]+f[rc[x]][i-2-j]} 注意边界情况。 if(i==0)f[x][i]=0; if(!lc[x])f[x][i] 阅读全文
posted @ 2020-03-10 22:11 syzf2222 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 毒瘤的状压DP题。 思路非常的好想,就是枚举每一种情况,考虑他对这一行和上一行的影响,从而设状态。 我们可以通过一定的数学公式来看看到底有多少种情况。 每个点可以填竖边或者填横边或不填。 f[0]=1,f[1]=2; f[i]=2*f[i-1]+f[i-2] 算出来f[11]有一万多,要超时了,怎么 阅读全文
posted @ 2020-03-10 14:25 syzf2222 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 跟拍照几乎是重题。 在输出部分,若最后一次bfs还能到这个点,则可以输出。 只要有一个点可以从源点过得去,就可以通过正或反流到达所有经过的点。 但是我不明白若把所有项目都割掉了,那不就嘎嘎了。 这里也求广大读者说出自己的理解。 看代码: #include<bits/stdc++.h> using n 阅读全文
posted @ 2020-03-09 21:38 syzf2222 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 几乎是个板子,跟游戏几乎是重题。 将每行建点,每列建点,这样可以保证每行每列都只有一个。 格点拆掉,算个费用流就好了。 看代码: #include<bits/stdc++.h> using namespace std; #define inf 1e9 const int maxn=100005; i 阅读全文
posted @ 2020-03-07 21:06 syzf2222 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 横的联通快为入,竖的为出。 样例的图就像这样: S->a1,a2,a3,a4,a5 a1->2,3,4 a2->5 a3->7,8 a4->9,10 a5->12 5,9->b1 2->b2 10->b3 3,7->b4 4,8,12->b5 代码如下: #include<bits/stdc++.h 阅读全文
posted @ 2020-03-06 22:41 syzf2222 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 努力刷网络流找感觉ing…… 这其实是一个费用流,拆点,流量为1,费用为val。 求其最大费用流,可以转化为边权相反,求最小费用流的相反数。 看代码: #include<bits/stdc++.h> using namespace std; #define inf 1e9 int val[100][ 阅读全文
posted @ 2020-03-06 21:46 syzf2222 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 个人认为思维难度比较大。 看到这题,我们要想办法将其转化为最小割。 考虑到割x,y,z都能完成任务,我们将其并联,割掉其中任意一边都行。 因为割得是权,于是以权为点,而不是以节点为点。 并且要拆点。 超级源点向x连边,x向y的入口连边,y的入口向出口连边,y的出口向z连边,z向超级汇点连边。 看代码 阅读全文
posted @ 2020-03-06 20:46 syzf2222 阅读(177) 评论(0) 推荐(0) 编辑