首页 > 编程学习 > 题解CF94B Friends

题解CF94B Friends

发布时间:2022/8/20 7:09:34

简洁题意:求出任三点之间是否存在直接连通或都不连通,若存在,输出 WIN ,否则输出 FAIL

由于数据范围非常小, m<=10 ,则我们可以采用暴力枚举三个点的方式求出答案

#include<bits/stdc++.h>
#define N 100010
using namespace std;
typedef long long ll;
ll G[17][17],m,fri,maxn,unfri;
int main(){
    scanf("%lld",&m);
    for(ll i=1;i<=m;i++){
        ll from,to;
        scanf("%lld%lld",&from,&to);
        G[from][to]=G[to][from]=1;
        maxn=max(maxn,max(from,to));
    }
    for(ll i=1;i<=3;i++){
        for(ll j=i+1;j<=4;j++){
            for(ll k=j+1;k<=5;k++){
                if(i==j||i==k||j==k) continue;
                if((G[i][j]&&G[i][k]&&G[j][k])||(!G[i][j]&&!G[i][k]&&!G[j][k])){
                    puts("WIN");
                    return 0;
                }
            }
        }
    }
    puts("FAIL");
    return 0;
} 

但是这样的复杂度是 O(n^3) ,不够优秀

考虑如果一个点入度不为 2 时,则一定有三个人满足题目条件,否则则没有

时间复杂度 O(n) ,代码就不贴了

Copyright © 2010-2022 mfbz.cn 版权所有 |关于我们| 联系方式|豫ICP备15888888号