http://www.lydsy.com/JudgeOnline/upload/201712/prob12.pdf

dp[len][0/1] 表示节点表示区间长度为len,节点选/不选的 最大匹配

sum[len][0/1] 表示对应dp[len][0/1]的方案数

这里选节点即选节点与其父节点的边

设区间长度为len,左子区间长度为L,右子区间长度为R

这个节点选,那么左右子节点都不能选

dp[len][1]=1+dp[L][0]+dp[R][0]

sum[len][1]=sum[L][0]*sum[R][0]

这个节点不选,有3种情况:

左右子节点都不选:

dp[len][0]=dp[L][0]+dp[R][0]

sum[len][0]=sum[L][0]+sum[R][0]

选左子节点:

dp[len][0]=dp[L][1]+dp[R][0]

sum[len][0]=sum[L][1]+sum[R][0]

选右子节点:

dp[len][0]=dp[L][0]+dp[R][1]

sum[len][0]=sum[L][0]+sum[R][1]

如果dp[len][0] 在三种情况中有相同的,sum[len][0]要累加

len虽然是1e18,但只会用log种,所以用map

#include<map>
#include<cstdio>
#include<cstring> using namespace std; typedef long long LL; const int mod=; //int dp[100001][2];
//int sum[10001][2]; map<LL,LL>dp[];
map<LL,LL>sum[]; void dfs(LL len)
{
if(len==)
{
dp[][]=;
sum[][]=;
dp[][]=;
sum[][]=;
return;
}
LL R=len>>;
LL L=len-R;
if(dp[].find(L)==dp[].end()) dfs(L);
if(dp[].find(R)==dp[].end()) dfs(R);
dp[][len]=+dp[][L]+dp[][R];
sum[][len]=sum[][L]*sum[][R]%mod;
dp[][len]=dp[][len]-;
sum[][len]=sum[][len];
if(dp[][L]+dp[][R]>dp[][len])
{
dp[][len]=dp[][L]+dp[][R];
sum[][len]=sum[][L]*sum[][R]%mod;
}
else if(dp[][L]+dp[][R]==dp[][len])
{
sum[][len]=(sum[][len]+sum[][L]*sum[][R])%mod;
}
if(dp[][L]+dp[][R]>dp[][len])
{
dp[][len]=dp[][L]+dp[][R];
sum[][len]=sum[][L]*sum[][R]%mod;
}
else if(dp[][L]+dp[][R]==dp[][len])
{
sum[][len]=(sum[][len]+sum[][L]*sum[][R])%mod;
}
} int main()
{
LL n;
scanf("%I64d",&n);
dfs(n);
printf("%I64d %I64d",dp[][n],sum[][n]);
}

bzoj千题计划164:bzoj5123: 线段树的匹配的更多相关文章

  1. bzoj千题计划318:bzoj1396: 识别子串(后缀自动机 + 线段树)

    https://www.lydsy.com/JudgeOnline/problem.php?id=1396 后缀自动机的parent树上,如果不是叶子节点,那么至少有两个子节点 而一个状态所代表子串的 ...

  2. bzoj千题计划311:bzoj5017: [Snoi2017]炸弹(线段树优化tarjan构图)

    https://www.lydsy.com/JudgeOnline/problem.php?id=5017 暴力: 对于每一个炸弹,枚举所有的炸弹,看它爆炸能不能引爆那个炸弹 如果能,由这个炸弹向引爆 ...

  3. bzoj千题计划275:bzoj4817: [Sdoi2017]树点涂色

    http://www.lydsy.com/JudgeOnline/problem.php?id=4817 lct+线段树+dfs序 操作1:access 操作2:u到根的-v到根的-lca到根的*2+ ...

  4. bzoj千题计划196:bzoj4826: [Hnoi2017]影魔

    http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...

  5. bzoj千题计划274:bzoj3779: 重组病毒

    http://www.lydsy.com/JudgeOnline/problem.php?id=3779 有一棵树,初始每个节点有不同的颜色 操作1:根节点到x的路径上的点 染上一种没有出现过的颜色 ...

  6. bzoj千题计划271:bzoj4869: [六省联考2017]相逢是问候

    http://www.lydsy.com/JudgeOnline/problem.php?id=4869 欧拉降幂+线段树,每个数最多降log次,模数就会降为1 #include<cmath&g ...

  7. bzoj千题计划252:bzoj1095: [ZJOI2007]Hide 捉迷藏

    http://www.lydsy.com/JudgeOnline/problem.php?id=1095 点分树+堆 请去看 http://www.cnblogs.com/TheRoadToTheGo ...

  8. bzoj千题计划251:bzoj3672: [Noi2014]购票

    http://www.lydsy.com/JudgeOnline/problem.php?id=3672 法一:线段树维护可持久化单调队列维护凸包 斜率优化DP 设dp[i] 表示i号点到根节点的最少 ...

  9. bzoj千题计划244:bzoj3730: 震波

    http://www.lydsy.com/JudgeOnline/problem.php?id=3730 点分树内对每个节点动态维护2颗线段树 线段树以距离为下标,城市的价值为权值 对于节点x的两棵线 ...

随机推荐

  1. VS2010中配置OpenGL

    下面将对VS2010中配置OpenGL进行简单介绍. 学习OpenGL前的准备工作第一步,选择一个编译环境现在Windows系统的主流编译环境有Visual Studio,Broland C++ Bu ...

  2. HDU 4336 Card Collector 期望dp+状压

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4336 Card Collector Time Limit: 2000/1000 MS (Java/O ...

  3. #1490 : Tree Restoration

    微软 2017春招真题 题目 There is a tree of N nodes which are numbered from 1 to N. Unfortunately, its edges a ...

  4. angularJS1笔记-(19)-angular异步加载包的方式

    我们平时写的导入包的方式都是同步方式,有时候会显得过于卡顿,这样我们就可以使用异步加载的方式. script.js方式: 执行结果为: 异步加载还可以加载多个即为script([,,,],functi ...

  5. PHP学习心得2

    对于PHP的语法结构,刚开始真的很不习惯,真搞不懂为什么每个变量之前都要加个“$”符号,每个语句写完之后都必须加上“分号”来表示此句已经结束,还有,PHP对字母的大小写是敏感的,写的时候一定要注意大小 ...

  6. poj 1966(顶点连通度)

    题意:给出一个n个节点和m条边的图,求该图的顶点连通度. 分析: 顶点连通度的求解可以转换为网络最大流问题. (1)原图G中的每个顶点v变成网络中的两个顶点v‘和v’‘,顶点v’至v''有一个条弧(有 ...

  7. SpringBoot(十一)_springboot热部署

    在开发中,后台修改了代码就要重新启动服务,很是费劲,现在我们可以让SpringBoot自动编译 热启动就需要用到我们在一开始引入的另外一个组件:devtools.它是 Spring Boot 提供的一 ...

  8. ie8 ajaxSubmit 上传文件提示下载

    转载 解决ie下ajaxsubmit上传文件提示下载文件问题 主要是应为放回类型为json,返回text/html

  9. Ubuntu和Windows相互共享文件夹

    一.Ubuntu访问Windows共享文件夹 1.对需要共享文件夹右击->属性->共享 2.选择要与其共享的用户,选择好用户点击有点添加按钮添加,然后点击下方的共享按钮 3.完成共享 4. ...

  10. PGM学习之七 MRF,马尔科夫随机场

    之前自己做实验也用过MRF(Markov Random Filed,马尔科夫随机场),基本原理理解,但是很多细节的地方都不求甚解.恰好趁学习PGM的时间,整理一下在机器视觉与图像分析领域的MRF的相关 ...