hdu7439

题面

小马给出长度为 \(n\) 的正整数序列 \(f,g\),现以如下方式生成 \(n\) 个点的有向图:

for i from 1 to n: 
	for j from i+1 to n: 
		if f[i] < f[j] and g[i] < g[j]: 
			add edge from i to j 
        else:
			add edge from j to i

试求出图中三元环的个数。

数据范围:\(n\le 2\times 10^5\)

题解

对于求竞赛图的三元环个数,是有一个性质:

\[ans=\binom{n}{3}-\sum_{i=1}^n\binom{d_i}{2} \]

因为你选取图中的任意三个点 \(x,y,z\),他们一定两两有边,那么若 \((x,y,z)\) 没有形成三元环的话,就有一个点的入度是 \(2\)

所以现在的问题就是对每个 \(i\) 求出其 \(d_i\) 了。

那么之后就是求两次三维偏序了。

同类题

P4249 [WC2007] 剪刀石头布,之前一直没去做

题意是你给竞赛图定向,最后让三元环数最多。

首先是可以考虑将边先贡献到点上,然后在点这里计算贡献。

根据上面的公式,我们知道一个点第一次被产生贡献是 0,第二次就是 1,以此类推。

那么我们就可以用费用流来处理(感觉费用流的题还是比较少,所以还是需要注意注意)。

建图:

  1. 由源点 \(S\) 向每一条边对应的点连边,容量为 \(1\),费用为 \(0\)

  2. 由每一条边对应的点向该边连接的两个图上结点连边,容量为 \(1\),费用为 \(0\)

  3. 由每一个图上结点向汇点 \(T\) 连若干条边,费用依次为 \(0,1,2,3,...,n-1\) (分别表示该点入度从 \(0\) 开始每增加
    \(1\) 就会失去的三元环数量),容量均为 \(1\)

启发

  • 就是竞赛图三元环个数的计算trick
  • 后面的费用流做法也可以注意一下。
  • 注意费用流的复杂度是 \(O(nmf)\) 的(\(f\) 是流量大小)
posted @ 2024-08-28 21:21  qwq_123  阅读(8)  评论(0编辑  收藏  举报