竞赛图如何构造三元环

讲解视频

一场NOIp模拟赛的T3里看到的一个东西,因为那道题目不开放评测,所以简单写一下。

假设存在这样一张竞赛图,其中存在这样一个环

$node_a \rightarrow node_b \rightarrow node_c \rightarrow node_d \rightarrow node_e \rightarrow node_a$

首先明确,这是一个竞赛图,对于任意的$node_a$和$node_b$,要么存在$node_a \rightarrow node_b$要么存在$node_b \rightarrow node_a$。

我们的目标是在一个竞赛图中构造三元环,根据这个方法,我们就可以使用$Tarjan$算法把任意大小的环构造成三元环。

一些具体的步骤

定义环的大小为$tol$,那么上述的环$tol=5$,目标是把$tol$变为3,一个方法是在环中找到一个$tol=3$的环,一个方法是不断删点,最终删到$tol=3$

我们同时进行这两个方法。

再回到上面的性质:

对于任意的$node_a$和$node_b$,要么存在$node_a \rightarrow node_b$要么存在$node_b \rightarrow node_a$

首先对于$node_a \rightarrow node_b \rightarrow node_c$

必定存在$node_a \rightarrow node_c$或者 $node_c \rightarrow node_a$

对于第一个,我们可以将$tol--$,对于第二个,显然找到了一个$tol=3$的环,

然后继续执行下去就行了。

时间: 2024-10-25 18:29:42

竞赛图如何构造三元环的相关文章

竞赛图三元环期望个数

题意 给定\(n\)个点的竞赛图,有\(m\)条边的方向是确定的,剩下的边方向不确定,问期望三元环个数 题解 如果一个点\(u\)有两条已经确定的出边\((u,x),(u,y)\) 那么这组边一定无法构成三元环 所以我们记录每个点的已经确定的出度\(d\),出度+入度\(p\) 那么答案就是\(ans=C_{3}^{n}-\sum_{u=1}^{n}{C_{2}^{d_u}}+ d_u\times \frac{n-p_u}{2}+ \frac{C_{2}^{n-p_u}}{4}\) 原文地址:h

Gym - 100342J Triatrip (bitset求三元环个数)

https://vjudge.net/problem/Gym-100342J 题意:给出一个邻接矩阵有向图,求图中的三元环的个数. 思路: 利用bitset暴力求解,记得最后需要/3. 1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<cstdio> 5 #include<vector> 6 #include<stack> 7 #incl

三元环:在数集中求有多少个三元子集中的元素两两互质

2.14在杭二参加集训,校园好美!!!QAQ 杜教在下午为大家做了上午三题的讲解和一些CF杂题的选讲,其中有在图上求所有三元环的算法.这个算法不是很复杂,但还是蛮有趣的啦QWQ 我们已有一些整数,记作a1,a2,...,an.我们希望求出这些数中有多个含有三个元素的子集满足题目的条件,即{ai,aj,ak}中(ai,aj)=1且(ai,ak)=1且(aj,ak)=1. 第一步,建图.将a1,a2,...an分别作为编号为1,2,...,n的点处理,且如果ai和aj互质,那么结点i和结点j之间建立

HDU 6184 Counting Stars 经典三元环计数

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6184 题意: n个点m条边的无向图,问有多少个A-structure 其中A-structure满足V=(A,B,C,D) && E=(AB,BC,CD,DA,AC) 解法: 可以看出A-structure是由两个有公共边的三元环构成的,然后就变成了这道题. http://www.cnblogs.com/spfa/p/7495438.html #include <stdio.h>

Codeforces Gym 100342J Problem J. Triatrip 三元环

题目链接: http://codeforces.com/gym/100342 题意: 求三元环的个数 题解: 用bitset分别统计每个点的出度的边和入度的边. 枚举每一条边(a,b),计算以b为出度的边的终点构成的点集和以a为入度的边的起点够成的点集的交集,更新答案. 代码: #include<iostream> #include<cstring> #include<cstdio> #include<bitset> using namespace std;

Codeforces Gym 100342J Problem J. Triatrip 求三元环的数量 bitset

Problem J. Triatrip Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/attachments Description The travel agency “Four Russians” is offering the new service for their clients. Unlike other agencies that only suggest one-way

Gym - 100342J:Triatrip(Bitset加速求三元环的数量)

题意:求有向图里面有多少个三元环. 思路:枚举起点A,遍历A可以到的B,然后求C的数量,C的数量位B可以到是地方X集合,和可以到A的地方Y集合的交集(X&Y). B点可以枚举,也可以遍历.(两种都试过,区别不大.) 枚举代码: #include<cstdio> #include<bitset> #include<cstdlib> #include<cstring> #include<iostream> #include<algori

黑科技之三元环讲解

三元环是一个不怎么常见的黑科技,它的求解方法是一种基于分块思想的方法,比较简单好写,在这里介绍一下三元环的计数方法及正确性与时间复杂度证明. 对于一个n个点m条边的无向图,三元环是指对于图上的三个点,两两点之间都直接有边相连,这三个点组成的环就是三元环. 三元环的计数方法:记录图中每个点的度数,对于每条边将它定向.对于一条边,将度数大的点指向度数小的点,如果度数相同就将编号小的点指向编号大的点.计数时枚举每个点,对于每个点x枚举它的出边,并将出边指向的点y打标记,对于所有出边指向的点y再枚举出边

三元环HDU 6184

HDU - 6184 C - Counting Stars 题目大意:有n个点,m条边,问有一共有多少个‘structure’也就是满足V=(A,B,C,D) and E=(AB,BC,CD,DA,AC)这样一个图形,类似于四边形中间连接了一条对角线. 如果我们把这个四边形拆分的话,其实就是两个共用一条边的三角形,而在图中就是三元环.求三元环有两种求法,个人感觉这个三元环的时间复杂度很玄学. 第一种一种就是枚举点x,然后枚举和点x相连的y,这时根据y的度,如果y的度小于等于sqrt(m),那么我