码迷,mamicode.com
首页 > 其他好文 > 详细

CF round 623 Div.1D Tourism 题解

时间:2020-02-25 00:03:06      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:最简   复杂度   快速幂   不同   乘法   ble   矩阵快速幂   基础上   round   

题目链接:https://codeforces.com/contest/1314/problem/D

大意:
\(n\) 个顶点的有向图,顶点编号为 \(1\)\(n\),任意两个不同的顶点 \(A,B\),都有一条带权有向边 \(A\rightarrow B\)
Masha想从 \(1\) 出发走 \(k\) 条边之后返回 \(1\),且不走长度为奇数的环。(某一时刻Masha在 \(v\),之后走了经过奇数条路径后回到 \(v\),这是不允许的)
问Masha走过的路径权值之和的最小值
\(n \le 80\)\(k\le 10\),边权 \(\le 10^8\),保证k是偶数)

不要看位置是D,这题是除了签到题外最简单的题qwq但我还是没做出来

我首先想到的是广义矩阵乘法,即把矩阵乘法中的乘法换成加法,加法换成最小值(即 \(C_{i,j}=\min_{k=1}^n (A_{i,k}+B_{k,j})\)),这样邻接矩阵的 \(k\) 次方取 \(C_{1,1}\) 就是(伪)答案
但是这个答案是允许奇环的,所以比赛时我接下来就不知道在干嘛了

第一种思路是先染色,把点分成两部分,不允许走偶数次到达的点(黑点)和不允许走奇数次到达的点(白点),连接黑黑或白白的边权都设成 inf,这样构造的新的矩阵再 \(k\) 次方就行了。当时我一算,要至少算 \(\binom{79}{4}=1502501?\) 次矩阵快速幂,每个矩阵快速幂复杂度 \(80^2\times 4=25600\),感觉十分绝望

这个思路的正解其实是把所有点随机染色成黑白,每跑一遍矩快更新一下答案。事实上染色正确的概率是 \(\dfrac 1 {512}\),跑个几千次完全没问题(果然我还没领悟随机化的精髓

第二种思路是确定走偶数次到达的点(假设已染黑),这样所有走奇数次到达的点可以随心所欲不逾矩(只要不是黑点就行了),它们两两互不干涉,所以在确定黑点的基础上for一下就行了。这样复杂度是 \(80^5=3276800000\),不够优化,哭唧唧

这个思路的正解是事先处理一下所有的 \(A\rightarrow C \rightarrow B\) 的权值和存到数组 f[A][B] 中,然后排个序。如果要找 \(A\) 经过某一点到 \(B\) 的最短路(这个“某一点”不能是黑点),就从 f[A][B] 中找第一个不是黑点的路径。黑点最多也就5个,比找80次强多了

代码?代码是不存在的,作者太懒了

CF round 623 Div.1D Tourism 题解

标签:最简   复杂度   快速幂   不同   乘法   ble   矩阵快速幂   基础上   round   

原文地址:https://www.cnblogs.com/axiomofchoice/p/12359373.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!