Codeforces Round #562 (Div. 2) B. Pairs(思维)

B. Pairs

【题意】

给出 n (所有出现的数字范围在1...n),有 m 组数对,每组为(a, b)

问是否存在x,y 使得对于每组数至少有一个是 xy

【分析】

因为看了下tags,写着 graphs,所以我就往图上想了想...  然后想用领接表来着,但是...很显然会超时嘛

但是还没 T 就先 wa 了,可能哪里没处理好吧

THEN....

这是道思维题~ 

首先,如果存在这样的 xy 的话,那么对于第一组数对中,必然有一个是 y

记第一组数对为 x1,y1 ,第二组 x2,y2 (x1、x2、y1、y2互不相等)

那么就是有5种可能(x1, y1)(x1, x2)(x1, y2)(y1, x2)(y1, y2)

如果存在的话,必然是上面5种中的一种

所以判断一下就好啦

【代码】

#include<bits/stdc++.h>
using namespace std;

const int maxn=3e5+10;
struct node{
    int a,b;
}num[maxn];
int n,m;

bool check(int x,int y)
{
    for(int i=1;i<=m;++i)
        if(num[i].a!=x && num[i].b!=y && num[i].b!=x && num[i].a!=y)return false;
    return true;
}
int main()
{
    scanf("%d%d",&n,&m);
    int x1,y1,x2,y2,f=0;
    for(int i=1;i<=m;++i)
    {
        scanf("%d%d",&num[i].a,&num[i].b);
        if(i==1)x1=num[1].a,y1=num[1].b;
        else {
            if(!f && num[i].a!=x1 && num[i].a!=y1 && num[i].b!=x1 && num[i].b!=y1)
                x2=num[i].a,y2=num[i].b,f=1;
        }
    }
    if(check(x1,y1) || check(x1,x2) || check(x1,y2) || check(y1,x2) || check(y1,y2))puts("YES");
    else puts("NO");
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值