博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CodeForcs 1169B Good Triple
阅读量:6787 次
发布时间:2019-06-26

本文共 1408 字,大约阅读时间需要 4 分钟。

CodeForcs 1169B Good Triple

题目链接:

题目描述:给你m对不超过n的数字,找出一对x,y,满足在这m对数中至少有一个数字等于x或者y。

思路:假设第一对为(a,b),若x,y存在,则其中之一一定是a,b中的一个数,那么如果存在(c,d),使得与a,b都不相同,那么x,y中的另一个数必在c,d中,所以x,y可能是(a,c),(a,d),(b,c),(b,d),如果不存在(c,d),则x,y就是(a,b),要对m对数进行扫描,则只要满足以下五中情况任意之一即可:(a,b),(a,c),(a,d),(b,c),(b,d)。时间复杂度O(5m)。

#include 
#include
using namespace std;const int maxn = 300005;pair
pa[maxn];int n, m;bool check(int a, int b) { for (int i = 0; i < m; i++) { if (a != pa[i].first && a != pa[i].second && b != pa[i].first && b != pa[i].second) return false; } return true;}int main() { while (cin >> n >> m) { if (m == 1) { cin >> pa[0].first >> pa[0].second; cout << "YES" << endl; continue; } cin >> pa[0].first >> pa[0].second; int a = pa[0].first, b = pa[0].second, c, d; for (int i = 1; i < m; i++) { scanf("%d%d", &pa[i].first, &pa[i].second); if (a != pa[i].first && a != pa[i].second && b != pa[i].first && b != pa[i].second) { c = pa[i].first; d = pa[i].second; } } bool flag = check(a, b) || check(a, c) || check(a, d) || check(b, c) || check(b, d); if (flag) cout << "YES" << endl; else cout << "NO" << endl; } return 0;}

转载于:https://www.cnblogs.com/youpeng/p/10954770.html

你可能感兴趣的文章
Google Chrome调试常用快捷键
查看>>
发送邮件那些事
查看>>
loadrunner参数化
查看>>
Topcoder SRM558 1000 SurroundingGame
查看>>
dom树改变监听
查看>>
【后缀数组】poj3581 Sequence
查看>>
【kd-tree】bzoj1176 [Balkan2007]Mokia
查看>>
CodeBlocks中使用中文字符问题
查看>>
SQL plus连接远程Oralce数据库
查看>>
C#泛型详解
查看>>
php将表单中数据传入到数据库
查看>>
PDMS RvmTranslator
查看>>
第一天使用博客园 ----与肝胆人共事,于无字句处读书
查看>>
20172318 2018-2019-1 《程序设计与数据结构》第4周学习总结
查看>>
【python3的学习之路十二】面向对象高级编程
查看>>
机器学习导图系列(3):过程
查看>>
JSON
查看>>
js——BOM
查看>>
常用的加密与解密类
查看>>
hrbeu 哈工程 Eular Graph
查看>>