AtCoder Beginner Contest 260 F - Find 4-cycle
题目传送门:F - Find 4-cycle (atcoder.jp)
题意:
给定一个无向图,其包含了S、T两个独立点集(即S、T内部间的任意两点之间不存在边),再给出图中的M条边(S中的点与T中的点之间的边)。
求图中包含的一个四元环,若存在则输出环中包含的顶点,否则输出-1。
思路:
首先,四元环只能是由两个S中的点和两个T中的点构成,记为a、b,u、v,且a、b与u、v都直接有边相连。
|S| 为 300000,|T| 为 3000。于是我们考虑枚举S中点,记为Si,再枚举与Si相连的两个不同的点,记为u、v,则我们仍需找到S中一个点(四元环的第四个点,记为Sj),要求其与u、v相连。
再用一个二维数组记录 与T中两点相连的S中的点,记为between [ u ] [ v ],当值为 0 或值为 i 时,将其值更新为 i ,继续遍历; 当值不等于 0 且 不等于 i 时,则between [ u ] [ v ] 即为 Sj。
复杂度:O( max( |S| ,|T|2 ) ).
代码参考:
#include <bits/stdc++.h>
#define LL long long
using namespace std; const int S = 300010, T = 3010; int s, t, m, between[T][T];
vector<int> g[S]; int main()
{
cin >> s >> t >> m;
while(m--)
{
int u, v;
scanf("%d%d", &u, &v);
g[u].push_back(v);
} //枚举S中的点Si,再枚举与其相连的T中的两个不同点u,v
//若u,v能连到S中的不同于Si的某点,则这四个点构成四元环
for(int i = 1; i <= s; i++)
for(auto &u : g[i])
for(auto &v : g[i])
{
if(u == v) continue;
if(!between[u-s][v-s] || between[u-s][v-s] == i) between[u-s][v-s] = between[v-s][u-s] = i;
else {
cout << i << " " << u << " " << between[u-s][v-s] << " " << v << endl;
return 0;
}
} cout << -1 << endl; return 0;
}
AtCoder Beginner Contest 260 F - Find 4-cycle的更多相关文章
- AtCoder Beginner Contest 137 F
AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...
- AtCoder Beginner Contest 260 (D-E)
AtCoder Beginner Contest 260 - AtCoder D - Draw Your Cards 题意:N张卡牌数字 1-n,以某种顺序排放,每次拿一张,如果这一张比前面某一张小( ...
- AtCoder Beginner Contest 261 F // 树状数组
题目链接:F - Sorting Color Balls (atcoder.jp) 题意: 有n个球,球有颜色和数字.对相邻的两球进行交换时,若颜色不同,需要花费1的代价.求将球排成数字不降的顺序,所 ...
- AtCoder Beginner Contest 253 F - Operations on a Matrix // 树状数组
题目传送门:F - Operations on a Matrix (atcoder.jp) 题意: 给一个N*M大小的零矩阵,以及Q次操作.操作1(l,r,x):对于 [l,r] 区间内的每列都加上x ...
- AtCoder Beginner Contest 249 F - Ignore Operations // 贪心 + 大根堆
传送门:F - Keep Connect (atcoder.jp) 题意: 给定长度为N的操作(ti,yi). 给定初值为0的x,对其进行操作:当t为1时,将x替换为y:当t为2时,将x加上y. 最多 ...
- AtCoder Beginner Contest 247 F - Cards // dp + 并查集
原题链接:F - Cards (atcoder.jp) 题意: 给定N张牌,每张牌正反面各有一个数,所有牌的正面.反面分别构成大小为N的排列P,Q. 求有多少种摆放方式,使得N张牌朝上的数字构成一个1 ...
- AtCoder Beginner Contest 133 F Colorful Tree
Colorful Tree 思路: 如果强制在线的化可以用树链剖分. 但这道题不强制在线,那么就可以将询问进行差分,最后dfs时再计算每个答案的修改值, 只要维护两个数组就可以了,分别表示根节点到当前 ...
- AtCoder Beginner Contest 171-175 F
171 F - Strivore 直接把初始字符当成隔板,统计的方案数会有重复 为了避免重复情况,规定隔板字母尽可能最后出现,即在隔板字母后面不能插入含隔板字母的字符串 所以在隔板字母后插入的字符只有 ...
- AtCoder Beginner Contest 182 F
F - Valid payments 简化题意:有\(n\)种面值的货币,保证\(a[1]=1,且a[i+1]是a[i]的倍数\). 有一个价格为\(x\)元的商品,付款\(y\)元,找零\(y-x\ ...
随机推荐
- 记将一个大型客户端应用项目迁移到 dotnet 6 的经验和决策
在经过了两年的准备,以及迁移了几个应用项目积累了让我有信心的经验之后,我最近在开始将团队里面最大的一个项目,从 .NET Framework 4.5 迁移到 .NET 6 上.这是一个从 2016 时 ...
- 消息队列,IPC机制(进程间通信),生产者消费者模型,线程及相关
消息队列 创建 ''' Queue是模块multiprocessing中的一个类我们也可以这样导入from multiprocessing import Queue,创 建时queue = Queue ...
- 斯坦福NLP课程 | 第12讲 - NLP子词模型
作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www. ...
- 138_Power BI&Power Pivot特殊半累加度量
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 半累加度量(semi-additive measure),在DAX建模分析的时候经常遇见:应用场景诸如银行存款. ...
- 每天一个 HTTP 状态码 103
103 Early Hints 103 Earyly Hints 是被用于在最终 HTTP 消息前返回一些响应头,常和 HTTP Header: Link 一起使用,让客户端在服务器还在准备(当前的这 ...
- Redis 应用只 消息队列 简单实现(生产者 消费者模式)
运行效果:
- jeecgboot-vue3笔记(八)——treeSelect树形选择组件的使用(一次性加载)
使用效果 前端代码 定义interface export interface TreeDataItem { value: string; key: string; title?: string; sl ...
- 关闭StackExchange等平台的privacy收集窗口
技术背景 当我们打开一个StackExchange页面的时候,经常会出现一个很大的privacy收集窗口,而且不管怎么点都关闭不了,比如像下图这样: 如果屏幕足够大,影响可能也不是很大,但是关键是对于 ...
- springboot 项目 运行rabbitmq(推送+消费)
准备 先下载windos版本的mq 「rabbitmq-server-3.9.13.exe」https://www.aliyundrive.com/s/VKB63ghAJZx 点击下载 1启动rabb ...
- 龙芯发布 .NET 6 SDK 6.0.105-ea1 LoongArch64 版本
龙芯平台.NET,是龙芯公司基于开源社区.NET独立研发适配的龙芯版本,我们会长期进行安全更新和错误修复,并持续进行性能优化.社区.NET7版本开始已经原生支持LoongArch64架构源码.具备如下 ...