首页 > 其他分享 >CF1662C European Trip

CF1662C European Trip

时间:2023-07-20 09:02:41浏览次数:35  
标签:CF1662C end 矩阵 begin times bmatrix 合法 Trip European

CF1662C European Trip

没有限制怎么做?邻接矩阵 \(k\) 次方。

有限制?

设 \(A\) 为邻接矩阵, \(I\) 为单位矩阵,\(deg_u\) 为 \(u\) 的度数,步数为 \(k\) 是的答案矩阵 \(R_k\),即 \(R_k[u][v]\) 应该表示 \(u\to v\) 长度为 \(k\) 的合法路径条数。

如果我们知道了 \(R_1,R_2,\dots,R_{k-1}\),我们想求出 \(R_k\)。没有限制的话 \(R_k=R_{k-1}\times A\)。考虑由这个结果进行去重得到正确的矩阵。

考虑不合法的本质是啥。

由于前面的矩阵保证了答案正确,那么不合法一定出现在最后两步。即最后走的两步一定是 \((u\to v)\to x\to v\)。那么每条不合法路径都是 \(R_{k-2}\) 中的一条路径往外走一步再走回来。

设 \(\bold{T}=R_{k-1}\times A\)。

所以矩阵 \(\bold{T}\) 中每个位置 \(\bold{T}[i][j]\) 中不合法的路径数量应该是 \(R_{k-2}[i][j]\times (deg_j-1)\)。这个减 1 是因为来回跳两步的时候第一步不能走 \((u\to v)\to u\),即第一步 \(u\) 是不能走的(因为相当于 \(R_{k-1}\) 里都是是合法路径,第一步走 \(u\) 不合法)。

但是当 \(k=2\) 的时候又不能减 1,因为 \(R_{k-2}=R_{0}\),此时不存在上述的 \(u\)。此时特殊处理即可。

忽略 \(k=2\),设矩阵 \(E\),\(E[i][i]=deg_i-1\), \(E[i][j](i\not=j)=0\),易得 \((R_{k-2}\times E)[i][j]\) 的结果就是 \(R_{k-2}[i][j]\times (deg_j-1)\)

那么 \(R_k=R_{k-1}\times A-R_{k-2}\times E\)。得到了 \(O(n^3k)\) 的做法。

考虑把矩阵压进矩阵进行优化。

\[\begin{bmatrix}R_{k-1}& R_{k-2}\end{bmatrix}\begin{bmatrix}A& I\\-E & 0\end{bmatrix}=\begin{bmatrix}R_{k}& R_{k-1}\end{bmatrix} \]

\(0\) 表示全是 0, \(-E\) 是 \(E\) 中每个元素都变成其相反数。

提前计算出 \(R_0,R_1,R_2\),那么

\[\begin{bmatrix}R_{2}& R_{1}\end{bmatrix}\begin{bmatrix}A& I\\-E & 0\end{bmatrix}^{k-2}=\begin{bmatrix}R_{k}& R_{k-1}\end{bmatrix} \]

由矩阵乘法可得直接把矩阵拆开是对的,即把 \(\begin{bmatrix}A& I\\-E & 0\end{bmatrix}\) 拆成 \(2n\times 2n\) 的矩阵是合理的。

复杂度 \(O(8n^3\log k)\)。

标签:CF1662C,end,矩阵,begin,times,bmatrix,合法,Trip,European
From: https://www.cnblogs.com/jimmywang/p/17567310.html

相关文章

  • L11U3-1-Planning a trip
    PlanningatripDialogue1.I'vebeenplanningthisforsolong.2.I'mgoingtoAmerica.3.I'mplanningtohitallthebigcities.4.Iintendtogoforabouttwoweeks.5.I'vedecided...做计划用这些表达方式来谈论一个tentative(暂时的)计划。在动词think后,你可以......
  • CodeForces 605E Intergalaxy Trips 题解
    题意有一张\(n\)个点的有向完全图,边\(i\toj\)有\(p_{i,j}\)的概率出现(\(p_{i,i}=1\))。你要从\(1\)开始,每天可以走一条出边或留在原地,求最优策略下走到\(n\)的期望天数。输出小数(不取模)。\(n\le10^3\)思路设\(f(i)\)表示从\(i\)走到\(n\)的期望天数,那么......
  • Proj. CAR Paper Reading: Debin: Predicting Debug Information in Stripped Binarie
    Abstract本文:Debin任务:recoveringsymbolnames,typesandlocations方法:useescalablestructuredpredictionalgorithmsinprobabilisticgraphicalmodelswithanextensivesetoffeaturestodistinguishthenameandthetypeofkeyelementsextractedsucha......
  • [rk3568]linux strip后可执行程序太大
    查看GCC工具是否存在优化,或者未优化导致,$CC -Q--help=optimizers查看开启的程度,如果有很多disable未进行优化像,在makefile中增加-O0,极度优化状态进行Thefollowingoptionscontroloptimizations:-O<number>-Ofast-Og-Os-faggressive-loop-optimizations......
  • [LeetCode] 2475. Number of Unequal Triplets in Array
    Youaregivena 0-indexed arrayofpositiveintegers nums.Findthenumberoftriplets (i,j,k) thatmeetthefollowingconditions:0<=i<j<k<nums.lengthnums[i], nums[j],and nums[k] are pairwisedistinct.Inotherwords, nums[i]!=......
  • Codeforces Round #416 (Div. 2)-C. Vladik and Memorable Trip
    原题链接C.VladikandMemorableTriptimelimitpertestmemorylimitpertestinputoutputVladikoftentravelsbytrains.HerememberedsomeofhistripsespeciallywellandIwouldliketotellyouaboutone......
  • Java开发技巧-数据结构-使用HashSet判断主键是否存在、使用Pair成对结果返回/Triple三
    场景Java中使用HashSet判断主键是否存在HashSet实现Set接口,由哈希表(实际上是HashMap)实现,但不保证set的迭代顺序,并允许使用null元素。HashSet的时间复杂度跟HashMap一致,如果没有哈希冲突则时间复杂度为O(1),如果存在哈希冲突则时间复杂度不超过O(n)。所以,在日常编码中,可以使用HashSe......
  • European software vendors ranking 2012 (zz)
    Europeansoftwarevendorsranking2012//z2013-07-1214:08:[email protected][T62,L646,R24,V1099]欧洲最大100家软件企业公司一百强100强软件公司世界欧洲美国最大营业额利润排名RankCompanyPublic ?CountryofHQlocationSoftwarereven......
  • CALL n10s.rdf.import.fetch('~/env/datas/marvel.nt', 'N-Triples')路径应该如何定义
    在Neo4j中使用n10s.rdf.import.fetch()函数导入RDF数据时,路径的定义方式取决于你运行Neo4j数据库的操作系统和文件系统的配置。在给定路径之前,请确保你具有适当的文件系统权限。以下是路径定义的示例:在Windows上:CALLn10s.rdf.import.fetch('file:///C:/Users/YourUsername/e......
  • 2018-2019 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 201
    题目链接:https://vjudge.net/contest/339284#overview A.Numbers待做B.BrokenWatchs=input()s=s.split("")A,B,C,N=list(map(int,s))n=(N-1)//2ret=N*N*N-3*N*(n)*(n-1)-N-3*N*(N-1)ans=retmod=1<<64if(A==BandB==C):......