博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj4784: [Zjoi2017]仙人掌
阅读量:4546 次
发布时间:2019-06-08

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

道理我都懂,但是这个DP难度真的很大

先tarjan一下判断是不是仙人掌

对于环上的点,它们是不能相连的,直接拆了完事

然后我们成功的把仙人掌转成了树,就是一个treeDP

问题转化成在一棵树上,可以选择两个点将其树上路径覆盖,求不相交的覆盖方案数

令f[x]表示x子树中的方案数,它没有一条单向向上的路径,g[x]表示有的方案数,这个比较容易想到

但是如果让子节点的g两两匹配更新f[x],这样是极为复杂的,因为两两匹配数量是不定的

我们没有办法快速统计在两两匹配数量不同的情况下的方案数。

这是我遇到的瓶颈,%了网上的题解才知道以下做法:

令h[i]表示有i个孩子匹配,可以不匹配的方案数

f[x]=∏g[son]*h[子节点数]

选择不匹配,相当于由这个孩子连向了这个根节点,如果是重边,理解为不连,相当于舍弃了这条向上的边

这样就涵盖住所有的情况了:路径合并、某些子树不向上连(不必要把所有的边覆盖)

通过不连,把匹配数量不定的情况合并了,换个理解,舍弃的边视为连了自环,把所有的边都覆盖了,而这个等价于舍弃

同理g[x]=f[x]+∏g[son]*h[子节点数-1]*子节点数

意思是首先x可以选择自己向上连,也可以选择一个孩子向上,方案为g[y],其他的就是∏(不包括y)g[son]*h[子节点数-1],有子节点数种选择

#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;const LL mod=998244353;int read(){ int x=0,f=1;char ch=getchar(); while('0'>ch||ch>'9'){ if(ch=='-')f=-1;ch=getchar();} while('0'<=ch&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x;}struct node{ int x,y,next;bool bk;}a[2100000];int len,last[510000];void ins(int x,int y){ len++; a[len].x=x;a[len].y=y;a[len].bk=true; a[len].next=last[x];last[x]=len;}int z,dfn[510000],fr[510000];bool bk;void dfs(int x){ if(bk==true)return ; dfn[x]=++z; for(int k=last[x];k;k=a[k].next) if(dfn[a[k].y]==0)fr[a[k].y]=k,dfs(a[k].y); for(int k=last[x];k;k=a[k].next) { int y=a[k].y; if(a[fr[y]].x!=x&&dfn[x]

 

转载于:https://www.cnblogs.com/AKCqhzdy/p/10180043.html

你可能感兴趣的文章
C#读写socket的常用方式
查看>>
c语言链表fwrite二进制保存,读取时出现 屯 的问题
查看>>
谷歌Cartographer学习(1)-快速安装测试(转载)
查看>>
lib32gcc1 : Depends: gcc-4.9-base (= 4.9-20140406-0ubuntu1) but 4.9.3-0ubuntu4
查看>>
简单的将字符串转换成日期对象格式
查看>>
HTC G7 搜索和感光按键修改
查看>>
Dll注入经典方法完整版
查看>>
在非主线程中创建窗口
查看>>
查看selenium api的方法
查看>>
移植opencv2.4.2到tiny6410
查看>>
14种植物放入室内的奇异功效,为自己的健康而转
查看>>
全功能Python测试框架:pytest
查看>>
sed程序
查看>>
Hdu 1856(离散化+并查集)More is better
查看>>
SQLite
查看>>
在Windows下用gSoap实现简单加法实例
查看>>
小小知识点(二十五)5G关键技术——Massive MIMO(大规模天线阵列)和beamforming(波束成形)...
查看>>
『Collections』namedtuple_具名元组
查看>>
jquery.pagination.js分页插件的运用
查看>>
Windows Phone 7 创建自定义的控件
查看>>