简洁题意:求出任三点之间是否存在直接连通或都不连通,若存在,输出 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) ,代码就不贴了
标签:题解,ll,long,Friends,复杂度,CF94B From: https://www.cnblogs.com/dreamau/p/16607075.html