【题解】ZJOI2017仙人掌】的更多相关文章

[BZOJ4784][ZJOI2017]仙人掌(Tarjan,动态规划) 题面 BZOJ 洛谷 题解 显然如果原图不是仙人掌就无解. 如果原图是仙人掌,显然就是把环上的边给去掉,变成若干森林连边成为仙人掌的方案数. 那么对于一棵树而言,考虑其变成仙人掌的方案数. 设\(a_i\)表示匹配\(i\)个儿子的方案数,显然转移时\(a_i=a_{i-1}+(i-1)*a_{i-2}\),即考虑新加入的儿子是匹配另外一个儿子还是不管. 设\(f_u\)表示节点\(u\)的子树匹配成仙人掌的方案数,这里要…
4784: [Zjoi2017]仙人掌 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 312  Solved: 181[Submit][Status][Discuss] Description 如果一个无自环无重边无向连通图的任意一条边最多属于一个简单环,我们就称之为仙人掌.所谓简单环即不经过 重复的结点的环. 现在九条可怜手上有一张无自环无重边的无向连通图,但是她觉得这张图中的边数太少了,所以她想要在图上连上 一些新的边.同时为了方便的存储这张…
感觉这题很厉害啊,虽然想了一天多但还是失败了……(:д:) 这题首先注意到给定图中如果存在环其实对于答案是没有影响的.然后关键之处就在于两个 \(dp\) 数组,其中 \(f[u]\) 表示以 \(u\) 为根的子树中能构成仙人掌的方案数, 而 \( g[x] \) 则表示 \(x\) 个节点之间两两相互搭配(可以不搭配)的总方案数.转移则为: \(f[u] = \prod f[v] * g[tot + [u != root]]\) 其中 \(v\) 为 \(u\) 的儿子节点,而 \(tot\…
Description 如果一个无自环无重边无向连通图的任意一条边最多属于一个简单环,我们就称之为仙人掌.所谓简单环即不经过重复的结点的环. 现在九条可怜手上有一张无自环无重边的无向连通图,但是她觉得这张图中的边数太少了,所以她想要在图上连上一些新的边.同时为了方便的存储这张无向图,图中的边数又不能太多.经过权衡,她想要加边后得到的图为一棵仙人掌.不难发现合法的加边方案有很多,可怜想要知道总共有多少不同的加边方案.两个加边方案是不同的当且仅当一个方案中存在一条另一个方案中没有的边. Input…
题链: https://www.luogu.org/problemnew/show/P3687题解: 计数DP,树形DP. (首先对于这个图来说,如果初始就不是仙人掌,那么就直接输出0) 然后由于本来图中就存在于环中的边,不可能再次被包含, 所以图中的环就把这个图分为的若干颗树. 那么答案就是分别求出每颗树的方案数并相乘. 现在问题变为了求:把一颗树通过连边使得仍然是仙人掌的方案数. 定义如下3个数组: f[u]:表示u这颗子树中没有一条从u到子树内某个的节点的路径可以向其它子树连边的方案数.…
题解: 好难的dp啊...看题解看了好久才看懂 http://blog.csdn.net/akak__ii/article/details/65935711 如果一开始的图就不是仙人掌,答案显然为0,可以Tarjan判断. 环显然不能产生贡献,所以可以把环边都断开. 现在模型转化为,给定一棵树,用路径去覆盖树上的每一条边,且路径不能相交,求方案数. 设fifi表示做完了ii的子树,且没有路径可以向上扩展. 设gigi表示做完了ii的子树,且有路径可以向上扩展. 设hihi表示有ii个点,它们之间…
原文链接 https://www.cnblogs.com/cly-none/p/ZJOI2017cactus.html 给出一个\(n\)个点\(m\)条边的无向连通图,求有多少种加边方案,使得加完后得到一个仙人掌. \(n \leq 5 \times 10^5, \ m \leq 10^6\) 首先,判定无解后,我们可以把每个环删掉,那么答案就是剩下的若干树的加边方案的乘积. 于是就考虑一棵树怎么做. sol1 令\(dp_i\)表示在结点\(i\)的子树中的答案.考虑如何转移. 注意到,假如…
题目分析: 不难注意到仙人掌边可以删掉.在森林中考虑树形DP. 题目中说边不能重复,但我们可以在结束后没覆盖的边覆盖一个重复边,不改变方案数. 接着将所有的边接到当前点,然后每两个方案可以任意拼接.然后考虑引一条边上去的情况,选一个点不与周围连边就行了. 判仙人掌利用dfs树与树前缀和即可. 代码: #include<bits/stdc++.h> using namespace std; ; ; int T,n,m,arr[maxn],C[maxn],d[maxn],up[maxn],dep[…
传送门 题意:给一个无向连通图,问给它加边形成仙人掌的方案数. 思路: 先考虑给一棵树加边形成仙人掌的方案数. 这个显然可以做树形dp. fif_ifi​表示把iii为根的子树加边形成仙人掌的方案数. 然后有两种情况: iii点没有父亲 iii点有父亲 对于第一种情况即iii是树根的情况,显然fi=(∏fv)∗g∣sonp∣f_i=(\prod f_v)*g_{|son_p|}fi​=(∏fv​)∗g∣sonp​∣​,其中gig_igi​表示给iii个儿子两两配对(每个儿子可配可不配的方案数).…
首先考虑是棵树的话怎么做.可以发现相当于在树上选择一些长度>=2的路径使其没有交,同时也就相当于用一些没有交的路径覆盖整棵树. 那么设f[i]为覆盖i子树的方案数.转移时考虑包含根的路径.注意到每条跨根的路径都是由两条子树内到根的路径组成,只需要先统计出所有路径不跨根的方案数,再乘上包含根的路径的配对方案数就行了.既然路径不跨根,对于每棵子树可以独立计算再乘起来.冷静一下发现计算单棵子树的方案数还需要知道子树内可以向上延伸的路径的数量,那么不妨令f[i]改为表示用不跨根的路径覆盖i子树的方案数,…
其实挺简单的但是没想出来---- 首先判断无解情况,即,一开始的图就不是仙人掌,使用tarjan判断如果一个点dfs下去有超过一个点比他早,则说明存在非简单环. 然后考虑dp,显然原图中已经属于某个简单环的边就是没用的,tarjan缩点之后删掉两个端点在一个强连通分量中的边.(无向图的tarjan要记录father防止往回走,instack数组不需要了. 现在图变成了一个森林. 然后设sum为某个点的子树个数,w[i]为i棵子树相互连成环的方案数,w[i]=w[i-1]+w[i-2]*(i-1)…
Description P3687 [ZJOI2017]仙人掌 - 洛谷 | 计算机科学教育新生态 Solution 我们先考虑只有一棵树如何处理. 仙人掌可以看做若干环的集合. 特别的, 对于一条没有环的边, 可以加上重边, 那么这个边和它的重边构成一个环. 对于树来说, 问题就可以转化为求加上若干条边, 使树上的每一条边在且仅在一个环内的方案数. 去掉加的边, 也就是说求用若干条边不相交的链将整个树覆盖的方案数. 考虑树形dp. 设 \(f_i\) 表示考虑 \(i\) 的子树与 \(i\)…
(总计:共90题) 3.10~3.16:17题 3.17~3.23:6题 3.24~3.30:17题 3.31~4.6:21题 4.7~4.12:29题 ZJOI&&FJOI(6题) TJOI2016(6题) 六省联考2017(6题) SDOI2016(3题) HNOI2013(6题) CQOI2017(3题) 九省联考2018(3题) 3.10 [BZOJ4552][TJOI2016&&HEOI2016]排序(二分答案+线段树) [BZOJ4012][HNOI2015]开…
[APIO2014]连珠线 考虑一组以 \(x\) 为中点的蓝边,有两种可能: \[son[x]->x->fa[x] \] \[son[x]->x->son[x] \] 其中若有两个儿子间连边的点不存在祖先关系,那么它们就无法被连接到一起 因此所有的儿子间连边的点一定在一条链上 因此,若以链的最低点为根,那么所有儿子间连边的点的情况可以归纳为 \(son[x]->x->fa[x]\) 的情况 换根 \(dp\) 即可 点击查看代码 #include<bits/st…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ290.html 题解 真是一道好题! 首先,如果不是仙人掌直接输出 0 . 否则,显然先把环上的边删光. 问题转化成多个树求解,把答案乘起来即可. 现在我们考虑如何求一个树的答案. 再转化一下题意可以变成选出若干条长度至少为 2 的路径使得它们两两没有交. 标算十分优美.放到后面讲. 我先讲讲我的sb做法. 我们先来看看暴力 dp 怎么做: 设 dp[x][i] 表示子树 x ,在 x 节点上还有 i…
[ZJOI2017]仙人掌 参考博客:https://www.cnblogs.com/wfj2048/p/6636028.html 我们先求出\(dfs\)树(就是\(dfs\)一遍),然后问题就变成了树形\(DP\). 我们先判断无解:就用定义来判断,如果一条边出现在多个环里面就无解. 然后我们将所有在环上的边拆了,因为这些边不可能再出现在一个新的环中.于是我们得到了一个森林. 我们设\(f_v\)表示以\(v\)为根的子树得到仙人掌的方案数.\(ans=\prod_{v\ is\ root}…
题目描述 如果一个无自环无重边无向连通图的任意一条边最多属于一个简单环,我们就称之为仙人掌.所谓简单环即不经过 重复的结点的环. 现在九条可怜手上有一张无自环无重边的无向连通图,但是她觉得这张图中的边数太少了,所以她想要在图上连上 一些新的边.同时为了方便的存储这张无向图,图中的边数又不能太多.经过权衡,她想要加边后得到的图为一棵 仙人掌.不难发现合法的加边方案有很多,可怜想要知道总共有多少不同的加边方案.两个加边方案是不同的当且 仅当一个方案中存在一条另一个方案中没有的边. 输入格式 多组数据…
「ZJOI2017」仙人掌 题目大意: 给定一张无向联通图,求有多少种本质不同的不加重边的加边方案使得新图是个仙人掌. 解题思路: 如果原来的图不是仙人掌,那么答案就是 \(0\) ,否则求出这个仙人掌的无向图 \(\text{dfs}\) 树,任何一条新边都不能覆盖原来已经被覆盖过的边.那么只要把已经覆盖过得边删掉,变成若干棵树的问题,答案就是每棵树的答案的乘积. 一棵树的做法有一个很厉害的转化,因为题目要求不能有重边,我们可以允许转移加重边,并且每条树边必须被覆盖.然后会发现把每一种这样的方…
http://www.lydsy.com/JudgeOnline/problem.php?id=1023 Description 如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这张图为仙人掌 图(cactus).所谓简单回路就是指在图上不重复经过任何一个顶点的回路. 举例来说,上面的第一个例子是一张仙人图,而第二个不是——注意到它有三条简单回路:(4,3,2,1,6,5,4).(7,8,9,10,2,3,7)以及(4,3,7,8,9,10,2,1,…
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! 题目链接:UOJ290 正解:$DP$+仙人掌 解题报告: 考虑环上的边,不可能在连边中再被覆盖,所以只需要考虑树边就好了. 把环拆掉,只剩下若干棵树,就是一个森林,最后把每棵树的答案用乘法原理合并起来就好了.   对于每个节点$u$,我们考虑他的子树的连…
传送门 这图可以说是非常形象了2333 模拟赛的时候打了个表发现为一条链的时候答案是\(2^{n-2}\)竟然顺便过了第一个点 然后之后订正的时候强联通分量打错了调了一个上午 首先不难发现我们可以去掉所有在环上的边,那么就变成了一个森林,不同的树之间不可能有连边,那么只要所有树的答案乘起来就好了,只要在每一棵树内部树形\(dp\)即可 考虑对于\(u\),它的子树如何统计答案 我们强制子树必须得向外连一条边(显然最多只有一条),然后往上统计 如果子树里没有向外连边,每一棵子树的答案乘起来 如果向…
目录 @题目描述@ @solution@ @accepted code@ @details@ @题目描述@ 如果一个无自环无重边无向连通图的任意一条边最多属于一个简单环,我们就称之为仙人掌.所谓简单环即不经过重复的结点的环. 现在九条可怜手上有一张无自环无重边的无向连通图,但是她觉得这张图中的边数太少了, 所以她想要在图上连上一些新的边.同时为了方便的存储这张无向图,图中的边数又不能太多. 经过权衡,她想要加边后得到的图为一棵仙人掌. 不难发现合法的加边方案有很多,可怜想要知道总共有多少不同的加…
本质上还是树形dp.建立圆方树,遇到圆点的时候直接求(和树形dp一样即可),遇到方点做中转点的时候要考虑会从圆的另一侧通过(需满足最短路径的原则).原本是对于圆上的点进行 \(n^{2}\) 的匹配,果断超时.但没有发现 \(n ^ {2}\) 的dp明显是一个可以单调队列优化的dp.所以在遇上难解决的问题的时候,一定要融会贯通地思考.有一个细节:将圆复制一下可以去掉 \(max\)造成的影响,dp就十分方便了. #include <bits/stdc++.h> using namespace…
无实力非既得利益的$xrdog$作为一名外卡选手去参加ZJOI2017啦... Day 0: 颓?(细节待填坑..) Day 1: 上午我来到讲课现场发现讲课内容是:搜索专题  QwQ不太清醒的我一下吓了一跳,莫不是走错到了第二课堂(ZJOI也没有这东西啊)... 虽然说讲题人讲得也比较有趣(导致我没有睡着...)讲得东西也比较全面,但是在学$DLX$的时候有几分钟掉线了导致之后没有很听懂,讲的题目也较那啥,毕竟是搜索没有办法啊.收获不是很大...但是那道中位数的题目还是很可以的,被剧透了要考中…
$Day$ $-1$ 听说可以去$ZJOI2017$打酱油,终于可以出去走走辣$QAQ$... 上次出去打比赛似乎是$PKUSC$?? 好吧,至少可以一览国家预备队爷们的风采... 准备把膝盖留在浙江温州了... $Day$ $0$ 上午$11:00$就放学辣,从机房出来的时候一副滚粗既视感23333.回家准备行李.   校车把我们送到机场,办完手续听说还有$1$个多小时才登机. 之后那当然是颓颓颓啦... 感觉自从高中开始搞$OI$以来就没有出去玩过了?退役之后一定要把中国剩下几个没去过的地方…
良心的题解↓ http://z55250825.blog.163.com/blog/static/150230809201412793151890/ tarjan的时候如果是树边则做树形DP(遇到环就无视),最后在tarjan回溯前扫一遍当前点为“最高点”的环,进行环上DP,这个环上DP是$O(n^2)$的,但如果我们用单调队列优化则是$O(n)$的 总复杂度$O(n)$真是无限仰膜OTZ #include<cstdio> #include<cstring> #include<…
Codeforces Beta Round #83 (Div. 1 Only) A. Dorm Water Supply 题意 给你一个n点m边的图,保证每个点的入度和出度最多为1 如果这个点入度为0,那么这个点就是水龙头点. 如果这个点的出度为0,那么这个点就是储存点. 现在让你把所有水龙头到储存点的路径都输出出来,且输出这条路径的边权最小值 题解 显然是个仙人掌图,所以直接XJB暴力就好了 代码 #include<bits/stdc++.h> using namespace std; co…
DP+单调队列/仙人掌 题解:http://hzwer.com/4645.html->http://z55250825.blog.163.com/blog/static/150230809201412793151890/ QAQ了 呃……第一次做仙人掌的题目……感觉性质还是蛮神奇的(我是不是应该先做一点环套树的题目呢?>_>) 每个点都只会在一个简单环上,所以在dfs的时候,对于一个环,它上面的点是深度连续的一段(沿着father可以遍历这个环!),然后最后一个点再指回起始点,所以只要l…
Description如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这张图为仙人图(cactus).所谓简单回路就是指在图上不重复经过任何一个顶点的回路. 举例来说,上面的第一个例子是一张仙人图,而第二个不是——注意到它有三条简单回路:(4,3,2,1,6,5,4).(7,8,9,10,2,3,7)以及(4,3,7,8,9,10,2,1,6,5,4),而(2,3)同时出现在前两个的简单回路里.另外,第三张图也不是仙人图,因为它并不是连通图.显然,仙…
1023: [SHOI2008]cactus仙人掌图 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1141  Solved: 435[Submit][Status] Description 如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这张图为仙人图(cactus).所谓简单回路就是指在图上不重复经过任何一个顶点的回路. 举例来说,上面的第一个例子是一张仙人图,而第二个不是——注意到它有三条简单回路…