EVERYTHING HAPPENS FOR THE |

wnsyou

园龄:2年4个月粉丝:19关注:16

2023-05-24 16:48阅读: 32评论: 0推荐: 0

abc260_f Find 4-cycle 题解

Find 4-cycle

题意

有一个 s+t 个点 m 条边的简单无向图 G。点标号为 1s+t,边标号为 1m。第 i 条边连接点 uivi

如果 G 中包含一个大小为 4 的简单环,选择任意一个并按任意顺序输出环上的 4 个点。若不存在,输出 -1

数据范围

  • 2s3×105,2t3000
  • 4mmin(s×t,3×105)
  • 1uis,s+1vis+t
  • (ui,vi)(uj,vj)(ij)

思路

这个数据范围就很有特征,s 很大,但 t 只有 3000,这就是题目的提示。

既然 t2 不会超时,那就往暴力一点的方向思考。

大小为 4 的环,必然是编号小于等于 s 的两个点和编号大于 s 的两个点。

枚举一个编号小于等于 s 的一个点 i,选择两个与它相连的两个点(编号不同),如果这两个点都连向另外一个点,那么就找出了一个大小为 4 环,输出即可;否则标记这两个点都连向 i

复杂度

  • 时间:O(t2+s+m)
  • 空间:O(t2+m)

Code

点击查看代码
#include <iostream>
#include <vector>
using namespace std;
const int N = 3e5 + 10;
int s, t, m, x, y, dp[3010][3010];
vector<int> v[N];
int main () {
ios::sync_with_stdio(0), cin.tie(0);
cin >> s >> t >> m;
for (int i = 1; i <= m; i++) {
cin >> x >> y;
v[x].push_back(y - s);
}
for (int i = 1; i <= s; i++) {
for (int j : v[i]) {
for (int k : v[i]) {
if (j != k) {
if (!dp[j][k]) {
dp[j][k] = i;
} else {
cout << i << ' ' << j + s << ' ' << k + s << ' ' << dp[j][k];
return 0;
}
}
}
}
}
cout << -1;
return 0;
}

本文作者:wnsyou の blog

本文链接:https://www.cnblogs.com/wnsyou-blog/p/17428672.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wnsyou  阅读(32)  评论(0编辑  收藏  举报
  1. 1 勝利への道 安藤浩和
  2. 2 Minecraft’s End Eric Fullerton
  3. 3 月光曲完整版 贝多芬 云熙音乐
  4. 4 平凡之路 (Live版) 朴树
  5. 5 Minecraft C418
  6. 6 Paradise NiziU
  7. 7 叫我,灰原哀 龙大人不喷火
  8. 8 心机之蛙,一直摸你肚子 ——《名侦探柯南》原创同人曲 炊饭,叶辞樱,温海,寒砧,南柯柯,小茜玛姬,盛姝,阿崔Ac,贝壳初,千湛,兮茶子DaYu,乔慕,黎鹿北,起千温卿,遮阳伞,曲悠
  9. 9 战 歌 此去经年
勝利への道 - 安藤浩和
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

暂无歌词

加载中…

{{tag.name}}

{{tran.text}}{{tran.sub}}
无对应文字
有可能是
{{input}}
尚未录入,我来提交对应文字
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示