标签:dots AtCoder 连通 比赛 记录 fft 个数 mathcal dp
ARC 140
打得很烂。Rank 590,Performance 1696。
D - One to One
每个点都有恰好一个出边,所以这是一个外向基环森林。因此连通块数就等于环的个数,我们只需要求出所有方案中环的个数的总和。直接算比较难办,考虑算每个环对答案的贡献。
首先,假如忽略掉 \(A_i=-1\) 的连通块,剩下的环是一定存在的,可以预先加到答案里。然后,观察到任意一个点数为 \(k\) 的、由 \(A_i=-1\) 的连通块组成的环,都会出现在 \(n^{c-k}\) 种方案里,其中 \(c\) 是 \(A_i=-1\) 的 \(i\) 的个数。接下来就是要计算出,对于所有 \(k=1,2,\dots,c\),点数为 \(k\) 的环有多少个。
假如我们任取 \(k\) 个 \(A_i=-1\) 的 \(i\),并设它们所在的连通块大小为 \(s_1,s_2,\dots,s_k\),那么这 \(k\) 个连通块可以组成 \((k-1)!\prod_{i=1}^k s_i\) 种不同的环,且这些环的大小都是 \(k\)。所以,可以直接 dp(或者分治 fft)算出环的个数,并求出答案。
时间复杂度 \(\mathcal{O}(n^2)\)(dp)或者 \(\mathcal{O}(n\log^2 n)\)(分治 fft)。
标签:dots,AtCoder,连通,比赛,记录,fft,个数,mathcal,dp 来源: https://www.cnblogs.com/alan-zhao-2007/p/atcoder-contest.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。