loj2587铁人两项】的更多相关文章

无向图,图中选出定点三元组(a,b,c),a->b->c的路径没有重复边.问方案有多少? -------------------------------------------- 首先求出圆方树,方点权值为连接的圆点数量,圆点权值为-1 这时,枚举a,c点,b点的方案数为a,c路径上的点权和. 枚举a,c点然后计算点权和明显超时.于是我们枚举b点,计算通过它的方案数. 所以神搜后有三种可能,b点的各个子分支与其它点,b点的向上分支与其它点,如果b点为a或c点的情况 --------------…
[APIO2018]铁人两项 题目描述 大意就是给定一张无向图,询问三元组\((s,c,f)\)中满足\(s\neq c\neq f\)且存在\((s\to c\to f)\)的简单路径(每个点最多经过一次)的数量. \(1\leq n,\leq 10^5,1\leq m\leq 2*10^5\) 我们考虑枚举\(s,f\)然后计算中间\(c\)的数量.我们发现对于一张图上统计两点之间路径上的点数量很好做.于是我们考虑建圆方树. 我们将圆点的权值定为\(-1\),将方点的权值定为与其直接相连的圆…
[APIO2018]铁人两项(圆方树,动态规划) 题面 UOJ 洛谷 BZOJ 题解 嘤嘤嘤,APIO的时候把一个组合数写成阶乘了,然后这题的70多分没拿到 首先一棵树是很容易做的,随意指定起点终点就只能在两点路径上选择第三点.那么考虑过中点的路径个数,就可以很方便的\(dp\)计算了. 对于仙人掌而言,把环全部缩成点,转成树,缩起来的点额外定义一个点权,同样可以直接在树上做\(dp\),额外考虑环自身内部的贡献. 那么对于一般图而言,构建圆方树,那么选定起点和终点后,还是只能选择两点路径之间的…
题目描述 比特镇的路网由 \(m\) 条双向道路连接的 \(n\) 个交叉路口组成. 最近,比特镇获得了一场铁人两项锦标赛的主办权.这场比赛共有两段赛程:选手先完成一段长跑赛程,然后骑自行车完成第二段赛程. 比赛的路线要按照如下方法规划: 1.先选择三个两两互不相同的路口 \(s\) ,\(c\) 和 \(f\) ,分别作为比赛的起点.切换点(运动员在长跑到达这个点后,骑自行车前往终点).终点. 2.选择一条从 \(s\) 出发,经过 \(c\) 最终到达 \(f\) 的路径.考虑到安全因素,选…
[APIO2018] Duathlon 铁人两项 LG传送门 圆方树+简单DP. 不会圆方树的话可以看看我的另一篇文章. 考虑暴力怎么写,枚举两个点,答案加上两个点之间的点的个数. 看到题面中的一句话: 考虑到安全因素,选择的路径经过同一个点至多一次. 换句话说就是简单路径,用(广义)圆方树的基本条件已经满足,可以把问题变到树上:令方点的权值为所在点双的大小,圆点会被算重所以点权为\(-1\),统计任意两点间的点权和就好了.直接做是\(n ^ 2\)的,考虑枚举每一个点看会产生多少贡献,对答案的…
 [APIO2018] 铁人两项 题目大意: 给定一张图,问有多少三元组(a,b,c)(a,b,c 互不相等)满足存在一条点不重复的以a为起点,经过b,终点为c的路径 如果你不会圆方树 ----------------------- 放弃是最好的选择(先学了再来吧) 如果你会圆方树 考虑\((a,...,c)\) 1.如果a,c不同属一个点双,不难发现答案为路上经过的(点双的节点个数)的和减去割点数 2.如果a,c同属一个点双,那么答案为本点双的节点个数 - 2 自然地想到方点的权值为内含节点个…
luogu 题目描述 比特镇的路网由 \(m\) 条双向道路连接的 \(n\) 个交叉路口组成. 最近,比特镇获得了一场铁人两项锦标赛的主办权.这场比赛共有两段赛程:选手先完成一段长跑赛程,然后骑自行车完成第二段赛程. 比赛的路线要按照如下方法规划: \(1\).先选择三个两两互不相同的路口 \(s, c\) 和 \(f\) ,分别作为比赛的起点.切换点(运动员在长跑到达这个点后,骑自行车前往终点).终点. \(2\).选择一条从 \(s\) 出发,经过 \(c\) 最终到达 \(f\) 的路径…
把这个图缩成圆方树,把方点的权值设成-1,圆点的权值设成点双的size,算 经过这个点的路径的数量*这个点的点权 的和即是答案. #include <iostream> #include <cstdio> #include <cstring> using namespace std; ; struct Edge{ int to[N],nxt[N],head[N],ecnt; Edge(){ecnt=;} void add(int bg,int ed) {nxt[++ec…
题目链接: [APIO2018]铁人两项 对于点双连通分量有一个性质:在同一个点双里的三个点$a,b,c$,一定存在一条从$a$到$c$的路径经过$b$且经过的点只被经过一次. 那么我们建出原图的圆方树,枚举中间点$b$,一对合法的$a,c$需要使这两个点位于与$b$直接相连的方点的不同子树中.树形$DP$,对圆点和方点分别统计答案即可. #include<set> #include<map> #include<queue> #include<stack>…
主要卡在一个结论上..关于点双有一个常用结论,也经常作为在圆方树/简单路径上的良好性质,对于任意点双内互不相同的三点$s,c,t$,都存在简单路径$s\to c\to t$,证明不会.可以参见clz博客..我就是跟着他学的 然后就好办了,转化为树上两点计经过点双内所有点个数,然后赋权后变为统计两两圆点对的路径权值和,这个就是一个树形DP,统计每个点作为圆点或者方点被所有路径经过多少次,加入答案.. 还是比较裸的,因为重点还在于这个很多题都出现到的点双的简单路径的性质.. #include<ios…