首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
APIO2018铁人两项数据
2024-11-05
loj2587 「APIO2018」铁人两项[圆方树+树形DP]
主要卡在一个结论上..关于点双有一个常用结论,也经常作为在圆方树/简单路径上的良好性质,对于任意点双内互不相同的三点$s,c,t$,都存在简单路径$s\to c\to t$,证明不会.可以参见clz博客..我就是跟着他学的 然后就好办了,转化为树上两点计经过点双内所有点个数,然后赋权后变为统计两两圆点对的路径权值和,这个就是一个树形DP,统计每个点作为圆点或者方点被所有路径经过多少次,加入答案.. 还是比较裸的,因为重点还在于这个很多题都出现到的点双的简单路径的性质.. #include<ios
[APIO2018]铁人两项 --- 圆方树
[APIO2018] 铁人两项 题目大意: 给定一张图,问有多少三元组(a,b,c)(a,b,c 互不相等)满足存在一条点不重复的以a为起点,经过b,终点为c的路径 如果你不会圆方树 ----------------------- 放弃是最好的选择(先学了再来吧) 如果你会圆方树 考虑\((a,...,c)\) 1.如果a,c不同属一个点双,不难发现答案为路上经过的(点双的节点个数)的和减去割点数 2.如果a,c同属一个点双,那么答案为本点双的节点个数 - 2 自然地想到方点的权值为内含节点个
[APIO2018]铁人两项——圆方树+树形DP
题目链接: [APIO2018]铁人两项 对于点双连通分量有一个性质:在同一个点双里的三个点$a,b,c$,一定存在一条从$a$到$c$的路径经过$b$且经过的点只被经过一次. 那么我们建出原图的圆方树,枚举中间点$b$,一对合法的$a,c$需要使这两个点位于与$b$直接相连的方点的不同子树中.树形$DP$,对圆点和方点分别统计答案即可. #include<set> #include<map> #include<queue> #include<stack>
[APIO2018]铁人两项 [圆方树模板]
把这个图缩成圆方树,把方点的权值设成-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]铁人两项(圆方树)
过了14个月再重新看这题,发现圆方树从来就没有写过.然后写了这题发现自己APIO2018打铁的原因竟然是没开long long,将树的部分的O(n)写挂了(爆int),毕竟去年APIO时我啥都不会,连tarjan都写不来,活该打铁. 不扯了写题解. 首先建立圆方树,然后任意枚举圆点s和f,然后c可以在这两个点路径中每个点双的点挑选.所以令圆点值为-1,方点值为点双大小,然后选法是圆点路径权值和.然后计算每个点出现多少次,可以对每个连通块树形DP求解,然后这道题就没了. #include<bits
2019.03.29 bzoj5463: [APIO2018] 铁人两项(圆方树+树形dp)
传送门 题意简述:给你一张无向图,问你满足存在从a−>b−>ca->b->ca−>b−>c且不经过重复节点的路径的有序点对(a,b,c)(a,b,c)(a,b,c)的数量. 思路: 对每一个连通块建一棵圆方树,然后可以按照圆点和方点做不同的树形dpdpdp. 圆点:找存在于两棵不同子树的点对数 方点:找存在于三颗不同子树的点对数. 代码: #include<bits/stdc++.h> #define ri register int using namesp
LOJ.2587.[APIO2018]铁人两项Duathlon(圆方树)
题目链接 LOJ 洛谷P4630 先对这张图建圆方树. 对于S->T这条(些)路径,其对答案的贡献为可能经过的所有点数,那么我们把方点权值设为联通分量的大小,可以直接去求树上路径权值和. 因为两方点之间的圆点会计算两次,所以圆点权值设为-1就好了. 那么现在有 \(n^2\) 个点对,求每个点对之间的路径上点的权值和. 对每个点计算一下被计算次数就可以了.这个路径次数计算注意考虑全.. 另外点对是圆点间的,所以方点初始sz[]为0,圆点的sz[]才是1. 方点其实建一条边就可以. LOJ为什么找
[BZOJ5463][APIO2018]铁人两项:Tarjan+圆方树
分析 根据题目中的要求,从\(s\)出发前往\(f\)一定可以,并且只可能经过这两个结点所在的点双连通分量和它们之间的点双连通分量,因此切换点\(c\)只能从这些点中选取. 建出圆方树后,因为圆方树上一条路径的两个端点(圆点)不能作为切换点,并且路径上其他的圆点都被两个路径上的点双连通分量所包含,可以发现,如果把方点的权值设为这个点双连通分量的\(siz\),圆点的权值设为\(-1\),那么圆方树上所有两个端点都是圆点的路径的权值和就是答案.这个问题可以通过考虑每个结点在多少条路径上来解决. 时
洛谷P4630 [APIO2018]铁人两项 [广义圆方树]
传送门 又学会了一个新东西好开心呢~ 思路 显然,假如枚举了起始点\(x\)和终止点\(y\),中转点就必须在它们之间的简单路径上. 不知为何想到了圆方树,可以发现,如果把方点的权值记为双联通分量的大小,圆点权值记为-1,那么\(x \rightarrow y\)的答案就是树上\(x\rightarrow y\)的路径权值和. 直接枚举\(O(n^2)\),点分治\(O(n\log n)\),考虑每个点被经过的次数乘上它的权值即可\(O(n)\). 注意图可能不连通. 代码 #include<b
[BZOJ5463] [APIO2018] 铁人两项
题目链接 LOJ. BZOJ. Solution 先建圆方树. 我们考虑暴力,枚举一个点对,我们枚举的点都是圆点,然后统计中间那个点可以取的位置的数量,加起来就是答案. 那么怎么统计呢,我们对于每个点赋一个点权,方点点权为点双的大小,圆点点权为\(-1\). 那么这条路径的点权和就是答案,注意要统计到端点的权值. 然后优化就很显然了,直接枚举每个点被算了多少次就行了,这个随便算一下就好了. 复杂度\(O(n)\). #include<bits/stdc++.h> using namespace
LOJ2587:[APIO2018]铁人两项——题解
https://loj.ac/problem/2587#submit_code (题面来自LOJ) 考试时候发觉树很可做,并且写了一个dp骗到了树的分. 苦于不会圆方树……现在回来发现这题还是很可做的! 先套路套圆方树,然后思考路径条数如何计算. 一个显然的想法:从一个点双-> 一个点双->……-> 一个点双,条数没准就是每个点双的大小! 于是我们能够想到方点的权值为点双的大小. 当然注意到我们选择的起点/终点以及每个点双之间相邻的切点只能走一次,为了去重,我们把圆点权值设为-1. 则任
[BZOJ5463][APIO2018]铁人两项(圆方树DP)
题意:给出一张图,求满足存在一条从u到v的长度大于3的简单路径的有序点对(u,v)个数. 做了上一题[HDU5739]Fantasia(点双连通分量+DP),这个题就是一个NOIP题了. 一开始考虑了各种各样的情况,最后发现几乎没有什么特殊情况,程序很优美. 首先和上一题一样建出圆方树,然后如果选择了点对(a,c),那么b一定在树上a到c的路径上. 给树上每个BCC点权为这个BCC的大小,普通点点权设为-1,那么答案就是所有起点终点均为普通点的路径的权值和.直接树形DP即可. #include<
【APIO2018】铁人两项
[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】铁人两项(圆方树,动态规划)
[APIO2018]铁人两项(圆方树,动态规划) 题面 UOJ 洛谷 BZOJ 题解 嘤嘤嘤,APIO的时候把一个组合数写成阶乘了,然后这题的70多分没拿到 首先一棵树是很容易做的,随意指定起点终点就只能在两点路径上选择第三点.那么考虑过中点的路径个数,就可以很方便的\(dp\)计算了. 对于仙人掌而言,把环全部缩成点,转成树,缩起来的点额外定义一个点权,同样可以直接在树上做\(dp\),额外考虑环自身内部的贡献. 那么对于一般图而言,构建圆方树,那么选定起点和终点后,还是只能选择两点路径之间的
【刷题】LOJ 2587 「APIO2018」铁人两项
题目描述 比特镇的路网由 \(m\) 条双向道路连接的 \(n\) 个交叉路口组成. 最近,比特镇获得了一场铁人两项锦标赛的主办权.这场比赛共有两段赛程:选手先完成一段长跑赛程,然后骑自行车完成第二段赛程. 比赛的路线要按照如下方法规划: 1.先选择三个两两互不相同的路口 \(s\) ,\(c\) 和 \(f\) ,分别作为比赛的起点.切换点(运动员在长跑到达这个点后,骑自行车前往终点).终点. 2.选择一条从 \(s\) 出发,经过 \(c\) 最终到达 \(f\) 的路径.考虑到安全因素,选
[APIO2018] Duathlon 铁人两项 圆方树,DP
[APIO2018] Duathlon 铁人两项 LG传送门 圆方树+简单DP. 不会圆方树的话可以看看我的另一篇文章. 考虑暴力怎么写,枚举两个点,答案加上两个点之间的点的个数. 看到题面中的一句话: 考虑到安全因素,选择的路径经过同一个点至多一次. 换句话说就是简单路径,用(广义)圆方树的基本条件已经满足,可以把问题变到树上:令方点的权值为所在点双的大小,圆点会被算重所以点权为\(-1\),统计任意两点间的点权和就好了.直接做是\(n ^ 2\)的,考虑枚举每一个点看会产生多少贡献,对答案的
[Luogu4630][APIO2018]Duathlon 铁人两项
luogu 题目描述 比特镇的路网由 \(m\) 条双向道路连接的 \(n\) 个交叉路口组成. 最近,比特镇获得了一场铁人两项锦标赛的主办权.这场比赛共有两段赛程:选手先完成一段长跑赛程,然后骑自行车完成第二段赛程. 比赛的路线要按照如下方法规划: \(1\).先选择三个两两互不相同的路口 \(s, c\) 和 \(f\) ,分别作为比赛的起点.切换点(运动员在长跑到达这个点后,骑自行车前往终点).终点. \(2\).选择一条从 \(s\) 出发,经过 \(c\) 最终到达 \(f\) 的路径
P4630 [APIO2018] Duathlon 铁人两项
思路 圆方树,一个点双中的所有点都可以被经过,所以给圆点赋值-1,方点赋值为圆点个数,统计圆点两两之间的路径权值和即可 代码 #include <cstdio> #include <algorithm> #include <cstring> #include <stack> using namespace std; int v2[100100*4],fir2[100100*2],nxt2[100100*4],cnt2; void addedge2(int u
LOJ #2587「APIO2018」铁人两项
是不是$ vector$存图非常慢啊...... 题意:求数对$(x,y,z)$的数量使得存在一条$x$到$z$的路径上经过$y$,要求$x,y,z$两两不同 LOJ #2587 $ Solution:$ 首先考虑一棵树的情况怎么做 我们枚举每一个点计算贡献,贡献即为经过这个点的链的数量 只要求出这个点的所有子树大小就可以算出这个贡献 然后发现如果某条链经过某个点双联通分量 这个连通分量里的所有点都会被这条链的端点对计算贡献 我们直接构建圆方树,令方点的权值为这个点双连通分量的大小 由于每个圆
【Luogu4630】【APIO2018】 Duathlon 铁人两项 (圆方树)
Description 给你一张\(~n~\)个点\(~m~\)条边的无向图,求有多少个三元组\(~(x, ~y, ~z)~\)满足存在一条从\(~x~\)到\(~z~\)并且经过\(~y~\)的路径.保证两点之间最多只有一条边连接. Solution 考虑对这张图建圆方树,每个方点的权值记录该点双的点数,每个圆点的权值为\(-1\).这样先确定\(~x, ~z~\)之后, 其路径上的点权和就是满足条件的\(~y~\)的个数 (因为一个圆点的贡献会算进两个相邻的方点中,所以每个圆点的权值
LOJ 2587 「APIO2018」铁人两项——圆方树
题目:https://loj.ac/problem/2587 先写了 47 分暴力. 对于 n<=50 的部分, n3 枚举三个点,把图的圆方树建出来,合法条件是 c 是 s -> f 路径上的方点连出去的某个圆点.像找 LCA 那样走一遍 s -> f 路径即可. 对于树的部分,考虑一条路径对答案的贡献是其边数减 1 ,所以对于每条边求一下它在多少路径中,就是 siz[ v ] * ( n-siz[ v ] ) ( v 是它指向的点),然后答案再减去 \( C_n^2 \) 即可. 注
热门专题
火车票区间最少座位编程题
wifi共享大师弹窗
SPSS中的部分变量无法显示
rtmp和rtsp使用场景区别
idea创建动态web项目
DOM BOM知识点梳理
cocos2d 父节点动画影响子节点
easyui序号列列名
ArrayList 把16个同随机分成4组
visual block 插入gvim
gis中一个面中的小面如何融到大面中
10个pictureBox如何选择
opensips系统编译界面出不来
VB6抓取足球网页数据
Android 使用 isEmpty()方法空异常
ubuntu如何修改ip
android 下载源码 提示 段错误
this.$router.push时没有带上path
即时聊天用的什么协议
beanstalkd 删除指定job