[bzoj2878][Noi2012]迷失游乐园(基环树dp) bzoj luogu 题意:一颗数或是基环树,随机从某个点开始一直走,不走已经到过的点,求无路可走时的路径长期望. 对于一棵树: 用两个$dp$数组分别记录从这个点起向上向下走的期望 向下走的$dp$不用多说 向上走的$dp$: 对于从$u$计算$v$的dp $dp[v]$应当是从u向周围引出所有路径减去走向t的路径的期望后再除以$deg_{u}-1$ 对于基环树: 环上的点很少. 此时环上的点的向上$dp$指从u出发向环上两头走的…
推荐讲解:https://www.cnblogs.com/Tunix/p/4561493.html 首先考虑树的情况,就是经典的树上概率DP.先DP出down表示从这个点向儿子走能走的期望长度,再DP出up表示向父亲走的期望长度,注意算up的时候要注意消除原先此点对父亲的down的影响. 再考虑环的情况,由于环上点不超过20个,所以怎么暴力DP都好,算出up后down用同样的方法DP即可. 概率递推式比较多,主要考虑好各种点的情况(树根,非树根,环上点,环外点,叶子). 再注意下式子里如果某项分…
考虑树的部分分怎么做.令f[i]为i向子树内走的期望路径长度,转移比较显然.算答案时先把其父亲的答案弄好就可以统计自己的答案了. 环套树也类似.树里直接dp,对环上点暴力考虑环上的每条路径,算完后再在树里统计答案. 说起来不是很难.事实上想清楚了也确实不是很难. 不明白为什么不管啥题我都能把代码写的贼长. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #incl…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2878 这个博客写得很好:https://www.cnblogs.com/qt666/p/7252284.html 其实就是分成子树部分(down)和向上的部分(up)来考虑.转移: 要想清楚vis的作用等等,还有那个ed的使用,是和fa配套的,也就是只在子树中使用: 期望就是其他状态的期望和除以总状态数,只要想清楚有些什么状态就很好转移了! 代码如下: #include<iostream>…
题目链接 BZOJ2878 题解 除了实现起来比较长,思维难度还是挺小的 观察数据范围发现环长不超过\(20\),而我们去掉环上任何一个点就可以形成森林 于是乎我们枚举断掉的点,然后只需求出剩余每个点为根的答案 设\(f[i]\)表示从\(i\)出发等概率走向子树的期望步数 如果\(i\)为根就是我们所需的答案 首先求出\(f[i]\),然后用换根法扫一遍便求出每个点为根的答案 对于我们枚举的环上的点\(u\),答案自然就是 \[\sum\limits_{(u,v) \in E} \frac{f…
传送门 题目描述 放假了,小Z觉得呆在家里特别无聊,于是决定一个人去游乐园玩. 进入游乐园后,小Z看了看游乐园的地图,发现可以将游乐园抽象成有n个景点.m条道路的无向连通图,且该图中至多有一个环(即m只可能等于n或者n-1).小Z现在所在的大门也正好是一个景点.小Z不知道什么好玩,于是他决定,从当前位置出发,每次随机去一个和当前景点有道路相连的景点,并且同一个景点不去两次(包括起始景点).贪玩的小Z会一直游玩,直到当前景点的相邻景点都已经访问过为止. 小Z所有经过的景点按顺序构成一条非重复路径,…
Description 放假了,小Z认为呆在家里特别无聊.于是决定一个人去游乐园玩. 进入游乐园后.小Z看了看游乐园的地图,发现能够将游乐园抽象成有n个景点.m条道路的无向连通图,且该图中至多有一个环(即m仅仅可能等于n或者n-1).小Z如今所在的大门也正好是一个景点. 小Z不知道什么好玩,于是他决定,从当前位置出发,每次随机去一个和当前景点有道路相连的景点,而且同一个景点不去两次(包括起始景点).贪玩的小Z会一直游玩.直到当前景点的相邻景点都已经訪问过为止.小Z全部经过的景点按顺序构成一条非反…
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! Description 放假了,小Z觉得呆在家里特别无聊,于是决定一个人去游乐园玩.进入游乐园后,小Z看了看游乐园的地图,发现可以将游乐园抽象成有n个景点.m条道路的无向连通图,且该图中至多有一个环(即m只可能等于n或者n-1).小Z现在所在的大门也正好是…
2878: [Noi2012]迷失游乐园 Description 放假了,小Z觉得呆在家里特别无聊,于是决定一个人去游乐园玩.进入游乐园后,小Z看了看游乐园的地图,发现可以将游乐园抽象成有n个景点.m条道路的无向连通图,且该图中至多有一个环(即m只可能等于n或者n-1).小Z现在所在的大门也正好是一个景点.小Z不知道什么好玩,于是他决定,从当前位置出发,每次随机去一个和当前景点有道路相连的景点,并且同一个景点不去两次(包括起始景点).贪玩的小Z会一直游玩,直到当前景点的相邻景点都已经访问过为止.…
一棵树的话直接树形dp(求出往下走和往上走的期望长度). 假如是环套树, 环上的每棵树自己做一遍树形dp, 然后暴力枚举(环上的点<=20)环上每个点跑经过环上的路径就OK了. --------------------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm&…
#include<iostream> #include<cstring> #include<cstdio> #define M 100005 #define ld long double *M],u[*M],l[*M],n,m,cnt,du[M],v[M],root,now,fa[M],c[M]; ld d[M],f[M],g[M],gg[M]; using namespace std; void jia(int a1,int a2,int a3) { cnt++; u…
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1791 题目大意:给你一棵n条边的基环树森林,要你求出所有基环树/树的直径之和.n<=1e6 题解:基环树DP写的很少…… 树的直径不用解释了,就是NOIP2018D1T3的20分做法,基环树直径,我们可以yy一下然后就能发现答案是2种:1.把环剖去以后其余的子树的直径.2.环上的一部分+选中的2点中各自的最长链. 第一种可以直接dfs求解,对于第二种……我们可以摒弃垃圾的dfs两遍求树…
题目描述 Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火绵延五百里,在和平环境中安逸了数百年的Z国又怎能抵挡的住Y国的军队.于是人们把所有的希望都寄托在了骑士团的身上,就像期待有一个真龙天子的降生,带领正义打败邪恶.骑士团是肯定具有打败邪恶势力的能力的,但是骑士们互相之间往往有一些矛盾.每个骑士都有且仅有一个自己最厌恶的骑士(当然不是他自己),他是绝对不会与自己最厌恶…
Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火绵延五百里,在和平环境中安逸了数百年的Z国又怎能抵挡的住Y国的军队.于是人们把所有的希望都寄托在了骑士团的身上,就像期待有一个真龙天子的降生,带领正义打败邪恶.骑士团是肯定具有打败邪恶势力的能力的,但是骑士们互相之间往往有一些矛盾.每个骑士都有且仅有一个自己最厌恶的骑士(当然不是他自己),他是绝对不会与自己最厌恶的人一同出…
基环树DP Page1:问题 啥是基环树?就是在一棵树上增加一条边. Page2:基环树的几种情况 无向 有向:基环外向树,基环内向树. Page3:处理问题的基本方式 1.断环成树 2.分别处理树和环,之后就是考环形DP了. Page4:如何找无向基环树的环? 无向图直接找环 Page5:基环内向树 首先它是一个有向图,它构成类似基环树的结构,有一个特点是每个点 都有且只有一个出度,并且环外的节点方向指向环内 如果题目说满足每一个点都有一个唯一出度,则本质上就是给了我们一个 基环内向树森林(不…
实际上基环树DP的名字是假的.. 这个限制关系可以看成每个点有一条出边,所以就是一个内向基环树森林. 找出每个基环树的环,然后对于树的部分,做DP,设状态选或不选为$f_{x,0/1}$,则 $f_{x,0}=\sum\limits_{y\in son_x} \max\{f_{y,0},f_{y,1}\}$ $f_{x,1}=\sum\limits_{y\in son_x} \max\{f_{y,0},f_{y,1}\}+[全选了f_{y,1}?]\sum\limits_{y\in son_x}…
题目描述 $ρ$有一个二分连通无向图,$X$方点.$Y$方点均为$n$个(编号为$1\sim n$).这个二分图比较特殊,每一个$Y$方点的度为$2$,一条黑色边,一条白色边.所有黑色边权值均为$a$,所有白色边权值均为$b$.选择一个$X$方点,代价为连接的所有边的权值之和.激活一个$Y$方点,需要选择至少一个与之相邻的$X$方点.现在,$ρ$想激活每个$Y$方点,他想知道最小的总代价.不过$ρ$很善良,他给你开了$O2$优化.这样你就不会被卡常了.当然,除非你真的连读入优化都不想写,或者常数…
一类基环树dp都是这个套路吧 随便拆掉环上的一条边 然后跑树形dp,设\(f[i][0/1]\)表示以第\(i\)个人为根的子树,第\(i\)个人选或不选,能收获的最大值 以断点\(u,v\)为根分别跑基环树,每个连通块答案就是 \(max(f[u][0],f'[v][0])\) 血:两个骑士可能相互憎恨,形成重边…
基环树DP,攻的当受的儿子,f表选,g表不选.并查集维护攻受关系.若有环则记录,DP受的后把它当祖宗,再DP攻的. #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #include <cmath> #define R(a,b,c) for(register int a = (b); (a) <= (c); ++(a)) #define…
题目链接 基环树套路题.(然而各种错误调了好久233) 当$m=n-1$时,原图是一棵树. 先以任意点为根做$dp$,求出从每一个点出发,然后只往自己子树里走时路径的期望长度. 接着再把整棵树再扫一遍,求出从每一个点出发时路径的期望长度. 最后再统计一遍答案即可. 当$m=n$时,原图是一棵基环树. 先找到图中那唯一的一个环,然后以环上的每一个节点为根在此节点的子树内做$dp$. 环上节点的数量很少,$dp$之后直接暴力算出从每一个环上节点出发时路径的期望长度. 然后把每一个环上节点的子树扫一遍…
http://www.lydsy.com/JudgeOnline/problem.php?id=1040 题意: 思路: 这是基环树,因为每个人只会有一个厌恶的人,所以每个节点只会有一个父亲节点,但是根节点也是有父亲节点的,所以在树中肯定是存在一个环的,只要删除该环中的任意一条边,那么就能将该图变成一颗树. 如果是树的话,那就很简单了,d[u][0/1] dp求解即可. 现在假设删除的边是e,两端的节点分别是u,v,首先对u为根的树作一次dp,最后取d[u][0](v取不取都无所谓),不能取d[…
题目:https://loj.ac/problem/2737 相连的关系形成若干环 / 内向基环树 .如果不是只有一个环的话,就得断开一些边使得图变成若干链.边的边权是以它为出边的点的点权. 基环树的树的部分可以 DP 或者贪心,贪心就是只在分叉处断边. 对于每个环,先做出 f[ i ][ 0/1 ] 表示环上这个点 不向下 / 向下 延伸链的代价,然后在环上 DP . 方法就是先指定 tot -> 1 的边不选, DP 一番,再制定 tot -> 1 的边选, DP 一番. 如果指定 tot…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1040 题目给出了$n$个点和$n$条无向边,即一棵基环树或者基环树森林. 如果题目给的关系是在一棵树上,就是一道经典的树形DP.现在我们考虑转化一下. 我们先找到那个环上的任意一条边,端点为u,v.加上这条边的影响仅仅是不能同时选择u和v. 所以我们考虑去掉这条边再分类讨论.如果不选u,那么v任意选:如果不选v,那么u任意选.那么DP的时候强制不走这条边,同时取两种不选根节点的最大值作为…
题意:给定N点N边的无向连通图,现在让你在图中找一点作为餐厅,使得最远点距离这点最近. 思路:为了保留整数,我们求最小直径,最后去除2.  直径来源于两部分: 1,在外向树中: 那么就是树的直接,一棵树求直径直接跑一边DP就可以了.(或者两遍BFS吧,麻烦一点而已),假设最大值为ans1. 2,可能通过了环. 一定有环上的边不在直接上,我们枚举这个断边. 那么现在就相当于一个X元环,环上的边有权值,X个点也各有权值,现在枚举每个断边,变成一条带枝桠的链,让你求ans2=min(最长链). 答案就…
传送门 解题思路 一道基环树上$dp$的题,这种题比较套路吧,首先第一遍$dfs$把环找出来,然后对于环上的每一个点都向它子树内做一次树形$dp$,$f[i][0/1]$表示到了$i$这个点选或不选的最大值,转移和没有上司的舞会那道题差不多,就是求一个带权最大独立集.然后再在环上做一次树形$dp$,$g[i][0/1][0/1]$表示以$i$为根的子树中$i$选不选,最后一维记录的是起始节点选不选,因为终止节点和起始节点只能选一个,然后就胡乱$dp$一下. #include<iostream>…
参考:https://blog.csdn.net/shiyukun1998/article/details/44684947 先看对于树的情况 设d[u]为点u向儿子走的期望长度和,du[u]为u点的度数,f[u]为u向儿子走的期望长度,只需要dfs两遍,一次求向儿子的d[u]+=f[e[i].to]+e[i].va;,第二次求向父亲走的情况d[e[i].to]+=(d[u]-e[i].va-f[e[i].to])/max(1,du[u]-1)+e[i].va;(u表示向父亲走之后能再向父亲的非…
http://www.lydsy.com/JudgeOnline/problem.php?id=2878 (题目链接) 题意 求基环树上以任意点为起点的简单路径期望长度. Solution 啊啊啊好丑陋.. 右转题解→_→:LCF 细节 注意特判环上最后一个点,以及算up的时候是否是根节点. 代码 // bzoj2878 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstrin…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2878 很好的树上概率题的思路,就是分成up和down. 代码中有众多小细节.让我弃疗好几天的致命小细节是dfs1里面那个sum要定义成double的!…… #include<iostream> #include<cstdio> #include<cstring> #define db double using namespace std; ; int n,m,he…
Description 放假了,小Z觉得呆在家里特别无聊,于是决定一个人去游乐园玩.进入游乐园后,小Z看了看游乐园的地图,发现可以将游乐园抽象成有n个景点.m条道路的无向连通图,且该图中至多有一个环(即m只可能等于n或者n-1).小Z现在所在的大门也正好是一个景点.小Z不知道什么好玩,于是他决定,从当前位置出发,每次随机去一个和当前景点有道路相连的景点,并且同一个景点不去两次(包括起始景点).贪玩的小Z会一直游玩,直到当前景点的相邻景点都已经访问过为止.小Z所有经过的景点按顺序构成一条非重复路径…
题意:有N个不同的商品,每个商品原价是Pi元,如果选择打折,可以减少Di元.  现在加一种规则,每个商品有一个友好商品Fai,如果i用原价买,则可以免费买Fai. 现在问买到所有物品的最小价格. 思路:显然是一个内向树基环. 先把悬在环上的树都求出DP[][],然后再在链上同理跑一遍DP. 我们先看树:dp[i][0]表示i节点不是原价买,dp[i][1]是原价买. dp[i][1]对儿子没有任何要求,而dp[i][0]=min(子树随便买+自己打折买, 子树至少一个原价买+自己免费买); #i…